{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归算法基本介绍\n",
    "\n",
    "在学习线性回归的知识点之前，我们先了解一下监督学习的概念。监督学习比较正式的定义是，给定一个训练集，学习到一个函数h：\n",
    "\n",
    "$χ↦y$\n",
    "\n",
    "h(x)是对对应值y的一个很好的估计,由于历史存在的问题，将这个函数h成为假设(hypothesis)。\n",
    "\n",
    "如果我们估计的值是个连续的值，我们将我们的学习问题称为回归，如果估计的值是一个离散的值，我们将我们的学习问题成为分类。\n",
    "\n",
    "线性回归指的是用自变量x的一次函数来估计结果y的值。\n",
    "\n",
    "\n",
    "$h_{\\theta}(x) = \\theta_{0} + \\theta_{1}x_{1}+\\theta_{2}x_{2}$\n",
    "\n",
    "上述中 $\\theta_{i}$为参数(也称为权重)，为了进一步简化我们的表示，我们假设 $x_0=1$,因此上式又可以写成：  \n",
    "\n",
    "$h_{\\theta}(x)=\\sum_{i=0}^{n}\\theta_ix_i=\\theta^Tx$\n",
    "\n",
    "给定一个数据集的情况下，怎样选择参数$\\theta$，使得假设能够比较接近y呢？这里，我们引入了成本函数(cost function)，它衡量了假设和y值得接近程度，即最小平方(最小二乘法)成本函数(least square cost function)  \n",
    "\n",
    "$J(\\theta)= \\frac{1}{2}\\sum_{i=0}^{m}(h_{\\theta}(x^{(i)})-y^{(i)})^2$\n",
    "\n",
    "\n",
    "### 最小均方算法(LMS, Least Mean Square)  \n",
    "我们的目标是选择合适的$\\theta$,去最小化成本函数$J(\\theta)$。我们从一个猜想的初始$\\theta$开始，逐步去更新$\\theta$，使得$J(\\theta)$更小，最终收敛到一个$\\theta$值，使得$J(\\theta)$最小。  \n",
    "  \n",
    "更加具体一点的是，考虑梯度下降算法(gradient descent)，从一个初始的$\\theta$值开始，不断重复地去做如下的更新：  \n",
    "\n",
    "$\\theta_{j} := \\theta_{j}-\\alpha\\frac{\\partial}{\\partial\\theta_{j}}J(\\theta)$\n",
    "\n",
    "上述的更新针对所有的$j=0,1,2...n$，这里$\\alpha$是学习率，在这里每一步选择$J(\\theta)$的最陡的方向进行$\\theta$的更新。  \n",
    "\n",
    "当只有一个样本的时候，有如下关系成立：\n",
    "\n",
    "$\\frac{\\partial J(\\theta)}{\\partial \\theta_{i}}=\\frac{\\partial}{\\partial\\theta_{i}}\\frac{1}{2}(h_{\\theta}(x)-y)^2$\n",
    "\n",
    "$=2\\cdot \\frac{1}{2}(h_{\\theta}(x)-y)\\cdot \\frac{\\partial}{\\partial \\theta_{i}}(h_{\\theta(x)}-y)$\n",
    "\n",
    "$=(h_{\\theta(x)}-y)\\cdot x_{i}$\n",
    "\n",
    "\n",
    "因此，当只有一个样本的时候，$\\theta$的更新规则如下：\n",
    "\n",
    "$\\theta_{j} := \\theta_{j}+\\alpha(y^{(i)}-h_\\theta(x^{(i)})x_j^{(i)}$\n",
    "\n",
    "这个规则也叫做最小均方更新规则，这个规则看上去很自然也很直观，比如更新的幅度正比于error项$y^{(i)}-h_\\theta(x^{(i)}$，当预测的值和y值比较match的时候，误差项比较小，$\\theta$更新的幅度也小，当预测的值和y值相差比较大的时候，说明模型参数还没有能很好地进行目标预测，$\\theta$更新的幅度也大。\n",
    "\n",
    "当有多个样本的时候，有两种方法可以对上述规则进行扩展，第一种方法称为批量梯度下降法(batch gradient decent),具体更新规则如下：  \n",
    "迭代如下公式直至收敛\n",
    "\n",
    "$\\theta_{j} := \\theta_{j}+\\alpha \\sum_{i=1}^{m}(y^{(i)}-h_\\theta(x^{(i)})x_j^{(i)}\\  (for \\  every \\ j)$\n",
    "\n",
    "需要注意的是，梯度下降法容易找到局部最小点，但是在这里提出的线性回归的优化问题只有一个全局的，而没有局部的最优值。因此在这里梯度下降法总是收敛到全局的最小值。在这里`$J$`是一个凸的二次函数，可以用梯度下降法去优化凸二次函数。  \n",
    "第二种方法称为随机梯度下降法(stochastic gradient decent),具体更新规则如下：  \n",
    "迭代如下公式：  \n",
    "\n",
    "$\n",
    "for\\ i=1\\ to\\ m: \\{ \n",
    "\\theta_{j} := \\theta_{j}+\\alpha (y^{(i)}-h_\\theta(x^{(i)})x_j^{(i)}\\  (for \\  every \\ j)\\}\n",
    "$\n",
    "\n",
    "在随机梯度下降的过程中，我们每次碰到一个样本，$\\theta$更新的时候只针对当前的样本去算梯度。批量梯度下降是扫描整个数据集然后更新参数，这是一个非常耗费的运算，而随机梯度更新一次参数的运算只针对单个样本，计算很快，所以能更快的接近最值点。需要注意的是，随机梯度下降不能达到最值点，在最后会在最值点震荡，但在很多问题中这样的优化策略已经足够实用。因此在实际场景中，随机梯度下降法比批量梯度下降法更实用。\n",
    "\n",
    "### 解析解方法的原理\n",
    "\n",
    "Let’s apply the equations we obtained in the last section to derive the least squares equations.\n",
    "Suppose we are given matrices $A\\in \\mathbb{R}^{m×n} $(for simplicity we assume A is full rank) and a\n",
    "vector $b\\in\\mathbb{R}^m $` such that `$b \\notin \\mathfrak{R}(A).$ In this situation we will not be able to find a vector $x\\in\\mathbb{R}^n,$ such that $Ax = b$, so instead we want to find a vector x such that Ax is as close as\n",
    "possible to b, as measured by the square of the Euclidean norm $\\left \\|Ax-b \\right \\|_2^2$ Using the fact that $ \\left \\| x \\right \\|_2^2= x^Tx$, we have\n",
    "\n",
    "$\\left \\|Ax-b \\right \\|_2^2\\newline=(Ax-b)^T(Ax-b)\\newline= x^TA^TAx-x^TA^Tb-b^TAx+b^Tb\\newline= x^TA^TAx-2b^TAx+b^Tb$\n",
    "\n",
    "Taking the gradient with respect to x we have, and using the properties we derived in the previous section\n",
    "\n",
    "$\\bigtriangledown_x(x^TA^TAx-2b^TAx+b^Tb)\\newline=2A^TAx-2A^Tb$\n",
    "\n",
    "Setting this last expression equal to zero and solving for x gives the normal equations\n",
    "\n",
    "$x=(A^TA)^{-1}A^Tb$\n",
    "\n",
    "[解析解完整的代码实现](./Linear_Regression_Analysis_Solution.ipynb)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性回归的概率解释：\n",
    "\n",
    "当面临线性回归的时候，为什么将最小二乘作为成本函数是合适的呢？在本部分，将给出一个概率解释，就理解为什么最小二乘作为线性回归的成本函数是很自然的一个算法。假设我们的目标变量和输入变量通过如下的等式关联起来:\n",
    "  \n",
    "  $y^{(i)}=\\theta ^T x^{(i)}+\\epsilon ^{(i)}$\n",
    "\n",
    "  其中$\\epsilon ^{(i)}$为误差项，可以将误差归结为是由于没有纳入到建模中的一些变量（特征），或者仅仅是由于噪声引起的。我们进一步假设$\\epsilon ^{(i)}$服从IID(independently and identically distributed)的均值为0，方差为$\\sigma$的高斯分布，写作 $\\epsilon ^{(i)}\\sim N(0,\\sigma^2)$ 。$\\epsilon ^{(i)}$ 的概率密度为：\n",
    "  \n",
    "$p(\\epsilon^{(i)})=\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(\\epsilon^{(i)})^2}{2\\sigma^2})$\n",
    "\n",
    "因此下面的等式也会成立：\n",
    "  \n",
    "$p(y^{(i)}|x^{(i)};\\theta)=\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(y^{(i)}-\\theta^Tx^{(i)})^2}{2\\sigma^2})$\n",
    "\n",
    "  给定一个数据集，它的似然函数(样本的联合分布)可以表示为：\n",
    "  \n",
    "$L(\\theta)=L(\\theta;X,\\vec y)=p(\\vec y |X;\\theta)$\n",
    "\n",
    "   由于我们假设$\\epsilon ^{(i)}$服从IID的高斯分布，因此上述的公式也可以写为:\n",
    "   \n",
    "$L(\\theta)=\\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\\theta)=\\prod_{i=1}^{m}\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(y^{(i)}-\\theta^Tx^{(i)})^2}{2\\sigma^2})$\n",
    "  现在我们考虑怎么选择合适的$\\theta$来最大化$L(\\theta)$。这里面我们采用了一个等价的方法，通过最大化$logL(\\theta)$\n",
    "\n",
    "$l(\\theta)=logL(\\theta)$\n",
    "\n",
    "$= log\\prod_{i=1}^{m}\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(y^{(i)}-\\theta^Tx^{(i)})^2}{2\\sigma^2})$\n",
    "\n",
    "$= \\sum_{i=1}^{m}log\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(y^{(i)}-\\theta^Tx^{(i)})^2}{2\\sigma^2})$\n",
    "\n",
    "$= mlog\\frac{1}{\\sqrt{2\\pi}\\sigma}-\\frac{1}{\\sigma^2}\\frac{1}{2}\\sum_{i=1}^{m}(y^{(i)}-\\theta^Tx^{(i)})^2$\n",
    "\n",
    "根据上式，最大化$l(\\theta)$也就是最小化$\\frac{1}{2}\\sum_{i=1}^{m}(y^{(i)}-\\theta^Tx^{(i)})^2$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于算法原理原生从零开始进行实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
    "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5",
    "execution": {
     "iopub.execute_input": "2022-08-25T08:18:45.532165Z",
     "iopub.status.busy": "2022-08-25T08:18:45.531449Z",
     "iopub.status.idle": "2022-08-25T08:18:45.545691Z",
     "shell.execute_reply": "2022-08-25T08:18:45.543824Z",
     "shell.execute_reply.started": "2022-08-25T08:18:45.532106Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "import time\n",
    "import copy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 生成实验模拟数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-08-25T08:18:49.973652Z",
     "iopub.status.busy": "2022-08-25T08:18:49.973178Z",
     "iopub.status.idle": "2022-08-25T08:18:50.224270Z",
     "shell.execute_reply": "2022-08-25T08:18:50.223039Z",
     "shell.execute_reply.started": "2022-08-25T08:18:49.973615Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGfCAYAAACqZFPKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAj7tJREFUeJzt3XlcVPX+P/DXzDCACiimbK6ooBmZCiqgCKYhxHgBNYPMq2abmt1SM8G0W/cKVmp+M73Vr5K+pZJLwNchSK+CohIpakJFiKAoqyXKosIs5/fHdA5zZs4s7Nv7+Xjw6MssZz6HHt/mfT+f9yJiGIYBIYQQQkgXJe7oBRBCCCGEtAQFM4QQQgjp0iiYIYQQQkiXRsEMIYQQQro0CmYIIYQQ0qVRMEMIIYSQLo2CGUIIIYR0aRTMEEIIIaRLo2CGEEIIIV0aBTOEEEII6dIs2vLisbGx+O6775CXl4devXrB19cX7733HkaPHs295sGDB1izZg3i4+NRX1+P2bNnY/fu3XB0dOReU1xcjOXLlyMtLQ02NjZYvHgxYmNjYWFh3vLVajVKS0tha2sLkUjU6vdJCCGEkNbHMAxqamrg4uICsdjI/gvThmbPns3s2bOHyc3NZS5dusQ8+eSTzNChQ5na2lruNS+//DIzZMgQ5vjx48z58+cZb29vxtfXl3teqVQyHh4ezKxZs5iLFy8y33//PTNgwAAmKirK7HXcuHGDAUA/9EM/9EM/9EM/XfDnxo0bRr/nRQzTfoMmb926BQcHB5w8eRLTp0/H3bt3MXDgQOzbtw/z588HAOTl5eHhhx9GZmYmvL29kZKSAplMhtLSUm635pNPPsGbb76JW7duwdLS0uTn3r17F/369cONGzdgZ2fXpvdICCGEkNZRXV2NIUOG4M6dO+jbt6/B17XpMZOuu3fvAgD69+8PAMjOzoZCocCsWbO414wZMwZDhw7lgpnMzEw8+uijvGOn2bNnY/ny5fjll18wYcIEvc+pr69HfX0993tNTQ0AwM7OjoIZQgghpIsxlSLSbgnAarUar732GqZOnQoPDw8AQHl5OSwtLdGvXz/eax0dHVFeXs69RjuQYZ9nnxMSGxuLvn37cj9Dhgxp5bshhBBCSGfRbsHMypUrkZubi/j4+Db/rKioKNy9e5f7uXHjRpt/JiGEEEI6RrscM73yyiuQy+U4deoUBg8ezD3u5OSEhoYG3Llzh7c7U1FRAScnJ+41P/30E+96FRUV3HNCrKysYGVl1cp3QQghhJDOqE13ZhiGwSuvvIKEhAScOHECrq6uvOc9PT0hlUpx/Phx7rHff/8dxcXF8PHxAQD4+PggJycHlZWV3GuOHTsGOzs7jB07ti2XTwghpCdSKIz/TjqdNg1mVq5ciW+++Qb79u2Dra0tysvLUV5ejvv37wMA+vbti2XLlmH16tVIS0tDdnY2li5dCh8fH3h7ewMAAgMDMXbsWCxatAg///wzfvjhB7z11ltYuXIl7b4QQghpXQwDpKYC3t6AjY3mn6mpmsdNUKgURn8nbadNS7MNZR/v2bMHS5YsAdDYNG///v28pnnaR0jXr1/H8uXLkZ6ejj59+mDx4sXYsmWL2U3zqqur0bdvX9y9e5eqmQghhAhTKDSBS2goP3iRSIBTp4DJkwED3zsMw0CeL8fmjM3IrcyFh4MHNkzfAJmbjJq1toC539/t2memo1AwQwghxCze3kBWVuPv4eFQfLgN0mGuUKgUkEqk3FPs7wqVAqkFqQiNDwWDxq9UEURIikxC0Mgg3vuI+cz9/qbZTIQQQggrN7fx/w4PB3PoEC5J/oCaUSOlIAXen3vDJsYG3p97I/VqKhiGgVQixeaMzbxABgAYMIjJiKFAph1QMEMIIYSw/uqDBrEYig+3QZ4vx4A+AyDPlyMsPgxZJVmoU9QhqyQLoftDIb8ih0KlwK+3fhW8XG5lruDjpHVRMEMIIYQAmpyZDRsAkQjw84N0mCtSrqbC1d4VMRkxRndenh33rOAlPRw82mPlPR4FM4QQQggASKWATAYkJQHTpwMA7is01beGdljYx5dNXAYR+Im+IogQPS2aqpraAQUzhBBCCEskAoKCgHffBQD0kvYCYHiHhX18otNEJEUkwXuwN2wsbeA92BuJEYkIcQ/BpYpLFNC0sXYdNEkIIYR0elJNwq5CpUCwWzDKa8uxYfoGhO7Xr1aK9ovmqpomOk9E5rJM7vnCqkLMPzAfZbVlvMdJ66NghhBCCBEglUghc5PhgfIBQtxCkBiRiNjTsVwfmahpUQhxC4FarQYAPLzrYUx0nghnW2eU1ZQhozgDakYNG0ubDr6T7o+CGUIIIcQAkUiEXtJeWP/f9XjJ8yW9nZfo49HYMmsLAGDswLE4ef2k3jWamwRsqK8N0Uc5M4QQQogJH//0MUbtHIWAuABEHo5EQFwA3Ha6Yde5XQAApVqJDdM3CCcB+zU9CZhhGKQWpAr2tSH6qAMwIYQQYoL3597IKsnSf3ywN7dbwzAM5FfkiMmI4Y6iov2imzzSgDoKN6JxBloomCGEkO5P9xhGqVLCQtLybAqFSoHUq6kIjw/HtKHTuJyY08WnkRCRwAsuWutoyJzgqScw9/ubcmYIIYR0eeyxzOaMzRhhPwIfPPEBBtkN4p5vSb4Jmwhc9WYVbK1sucdr6mtgY2nD23XR/YzmfqapvjaEj3JmCCGEdGkKlQLyfDlC40PhYuuCb+Z+g+yy7FbPN0m/ls67Zvr19Na5AQGm+toQPjpmIoQQ0uV5f+6Nc6XnULCqADmVOQiLD2u1fJP2zmFhj7WE+tpQzoww2pkhhBDS5eVW5sJvqJ9Zc5Saqr2nYrPHWkmR/I7CSZFJkLnJekwg0xSUM0MIIaTL83DwgLOtM4C2yTcxdU2lWgkLcet9pYpEIgSNDMIc9zncYwqVoklVUT0J7cwQQghpU7o9Vlp7TpFCpUC0XzTKa8oBtE2+ialr/lTyU6v3gGmtZOKegIIZQgghbaY9mr+JIILMXYbXfV5HSXUJov2iW615HaAJlgw1xIuaFoXCqkJM3zMd8ityGijZQSgBmBBCSJtoi8RZQ31cGIZBbUMtbK1sueZ1KVdScF95H70seiHYLbjJzeu0CTXEi5oWBZm7DPMPzEdCXkKP6wHTHqhpnhYKZgghpGO0ZvM3hmEgz5djc8ZmLqDYMH0DF6RoBzptMddI9xqFVYVYe3QtEvISAAA2ljaoiapp0WcQPqpmIoQQ0uFaKxlXu5dMVkkW6hR1yCrJQuj+UO54hw002upoi73+xhMbudlMbCADUA+YjkTBDCGEkDbTWsm45pZHmxP0tIRCpcDkwZNx6vopqBk193hLcnJIy1EwQwghpE0YS5xtzhe/Obs8bd0ThnrAdE7UZ4YQQkib0P7ib+kkaUCzmyOUf6O7y9PWc42oB0znQzszhBBC2gz7xZ+5LBM1UTXIXJaJoJFBTf7iN1UeXVRVhJXJKwG0z1wj6gHTuVAwQwghpE21xhe/oeOdxIhEyNxlWHN0DT7J/gRFVUXY4Gf4aEupUrboXkjnRKXZhBBCugxT5dHhY8JxaMEhJF9J5h1tfRT8EcY7jm/1cm3Stsz9/qacGUIIIZ0eG3hoBx/B3wTjaOFRXlURAPxx7w+9nBZTPWpI10bHTIQQQtpVU2c16faNWZG8AgBQ9aCKF8iwuzI/3vwR/nH+CP4mGJtObEJdQ12blmuTjkfBDCGEkHbT1IZ2Qn1jPs3+VC83RiwSY1vgNsjz5QiLD0PmzUykXk3FqeJT6GPZp03LtUnHo2CGEEJIu2hOQzuhvjFqRo01R9cgxD2ESwgOHBkIV3tXxGTE8F7rbOsMoO3LtUnHomCGEEJIu2huQzuhgCMhLwGLvlvElX2nLEwRfG1ZTRmA9inXJh2HghlCCOnGmpqf0taas0NiKOAovFOoFwDpvjajOANFVUWI9otutU7EpPOhYIYQQrqpthq42BJN3SExp1mesdeqGTXWHl0LmTuNIOjOqM8MIYR0QwqVAqkFqQiND+Ud64ggQlJkEoJGBrX7l7hCpUDq1VSE7m/amhiGwZH8I4g9HcuVVUdNi4LMXYbo49HYMmsL77XyK3LB8QlKtZL6zHQx5n5/UzBDCCHdlPfn3oKzjLwHeyNzWWYHrMh4sCESifQCDIVKATHEuKe8B1srW+7xwqpCvHH0DSyZsEQvCBK6hlQi1XtcqVLCQkLt1jozappHCCE9XGes4DE2pJE9FhNqbGdjaYPcylwc/OUgfir9CdX11Vg/bb1gECSVSHmBilQi5V17hP0IfPDEBxhkN4i3Btql6booZ4YQQrqpzlrBIzSryVTZtlKthIeDB96a/hZSFqbgzHNnuIGVQrlBKVdTuNwg7Wu72Lrgm7nfILssu1PlEpGWoWCGEEK6IWOJs52xgsecsu0VySt4QYdZQZBKyV1bJBLxGutRN+Dug4IZQgjphgxNmW5KBU+blHUrFAZ/N3UsVvWgSi/oMBUEsUdNuZW58BvqJ9hYT/v1dNTUNbVpMHPq1CnMmTMHLi4uEIlESExM5D2/ZMkSiEQi3k9QUBDvNbdv38bChQthZ2eHfv36YdmyZaitrW3LZRNCSLfA5qdkLstETVQNMpdlao5mVCr+C3UDDLRRWTfDAKmpgLc3YGOj+WdqquZxmD4WK6spEww6zMkN8nDwoG7A3VibBjN1dXV47LHHsGvXLoOvCQoKQllZGfezf/9+3vMLFy7EL7/8gmPHjkEul+PUqVN48cUX23LZhBDSbejlp4gtgJQUgwEF0LyxAyYpFIBcDoSGAllZQF2d5p+hoYBcbrKfTGFVITKKMwDoBx2mgiD22uU15Wa9nnQ9bRrMBAcH49///jfCw8MNvsbKygpOTk7cj729Pffcb7/9htTUVHz++eeYMmUKpk2bhp07dyI+Ph6lpaVtuXRCCOl+TAQU7A5Nc8cOGCWVAps384ImzUUZICbG4LFYYkQiZO4yrD26lpuQrR10mJMbxF57te9qlFSXUDfgbqjDc2bS09Ph4OCA0aNHY/ny5fjzzz+55zIzM9GvXz94eXlxj82aNQtisRhZWfq9E1j19fWorq7m/RBCSI9nIqCAtGlHN02Wa+C9fz0udCzm4eCB+QfmIyEvQfManaDD3Nwg9tqD7AZhjvsc6gbczXRon5mgoCDMnTsXrq6uuHr1KqKjoxEcHIzMzExIJBKUl5fDwcGB9x4LCwv0798f5eXlBq8bGxuLd955p62XTwghXY+JgILl4eAh2HCvRUcxHh6anSChx/+iHUwwDINfbv2Cstoy2Fja6DXYYxnrXaNNN7Ax9XrSdXRoMBMREcH9348++ijGjRuHkSNHIj09HTNnzmz2daOiorB69Wru9+rqagwZMqRFayWEkG7BjICCPboRGjugfXTTJAoFsGEDEB4OTJsGODsDZWXA6dNAdLTmeSn/mk0JOoR61xjT1NeTzq1TdQAeMWIEBgwYgIKCAsycORNOTk6orKzkvUapVOL27dtwcnIyeB0rKytYWVm19XIJIaRrMTOg0D66ERw7IFQNJTURDEilgEwGxd0qSPs0jiVQ1NVA2tsGMLArQkEHMUenCmZu3ryJP//8E87OmvI5Hx8f3LlzB9nZ2fD09AQAnDhxAmq1GlOmTOnIpRJCSNdjZkDBMAzOl57HRKeJvBlOCpVCkzabkqL5uX8f6NULCA4GZDKDAQmLAZB6M11wXAEd8JCWaNNBk7W1tSgoKAAATJgwAdu3b8eMGTPQv39/9O/fH++88w7mzZsHJycnXL16FevWrUNNTQ1ycnK4nZXg4GBUVFTgk08+gUKhwNKlS+Hl5YV9+/aZvQ4aNEkIIRoMw0CeLxcOKP6accRO2xaJRPAb6gdnW2eU15Rjte9qBA+ZCaayAtJhrtw1FdeLIK38A5gwAbAQ/t/ILZnibWhwJOn+zP3+btNqpvPnz2PChAmYMGECAGD16tWYMGECNm3aBIlEgsuXL+Nvf/sb3N3dsWzZMnh6eiIjI4N3RLR3716MGTMGM2fOxJNPPolp06bhs88+a8tlE0JIt2RO/xjtsmw1o8bJ6ycRnxuP9OvpOFN8BhLrXki9n8NvpvcgB4yXFy+QUaqVf31oy8q926R5H+l22nRnprOgnRlCCNHw/txbsErJe7A3d6RkF2uHic4T4WzrjLKaMq5Z3dVXryKnIkd4dyVCU+pcp6jD8H7DuecU9+sgTfw/IDISNjE2qFPU6X22jaUNaqJq9B5vym6O7m6NUq2EhbhTZVKQZjD3+5v+TRNCSA9iTv+Y31b+hkF2g7jfi6qK8OXFLzG833BEHIoQ3l05HYPMZZnIL85HxKGIxiMsvw2QPf00RADGOY6DpcSSFySpGbXBcm9TuzlslRO7e3Pmxhm87PUyhvcbzgUydCTVM1AwQwghPYip/jEMw+BC2QXMOzCPV8X0zgxN7y5TwdCuc7u462eVZCE0PhRJTycieORs/PDsD7C1akw8Lqoqwtqja7FkwhKDQYepz1OqlUi5koK4S3E4uOAg5PlyfjCllQ9Euq8O7wBMCCGkfZjT+l8opyYsPgzJ+clQqBQY5zhO8NpsMFRawx81w4DBmZtnIbGwRPq1dF7uS05lDg4uOGi0866pOUoWYgvEno7F1sCtkOfLERYf1nrzpEiXQcEMIYT0EOa0/mePdcQiMfyH+SPCIwLTh03HljNbIJVIsTVwq8FgqKiqiMuvYYlFYrzs9bLhIOlKcmOysA5zgi8A6GvVF672rojJiGndeVKky6BjJkII6UFMddXNrcxF+JhwbAvcBlf7xvLra3euAQB8BvvoN9ObpmmmF3U8ihsGyfIb6mc810Yr90WXyeZ9f63Zy8WLW7sQ7SMpSgrunujfKiGEdFHN7b9irKvuK5NfQczMGMjz5Yg8HMkLIIb1HWYwGHqgfADfIb4QQcQLWlxsXQA0f3ClqeBLoVIg2C0YgOl8oJ9KfoLPYB/Kn+mG6JiJEEK6oLbov6JQKbDBb4Ng7klYfBivF402qUQKqVgqOI36lcmvADCd+2KMseBLKpHCZ7APauprEO0XLXgkFTUtCoVVhZi+Zzrlz3RT1GeGEEK6mJZ00zWHOb1ojK1Nd7cIgOH1RiRh9qjZsJRYGny/OfeiVCkhEUsgvyLnHUlFTYuCzF2G+QfmIyEvwax7IJ1Hp+gATAghpPU1t5uuuZp7JMSuTfd3qUSKEPcQJEYk8nZtEiMSEeIewgUyLdltspBYcEdSmcsyURNVg8xlmfBw8OACGXPvgXQ9FMwQQkgX9PCAh+E/zB9iEf8/4839stY+emnJkZAuNhB59rtn8ajDo3qBxqLvFgHQJOcaG7WgVAlXPOlig6mNJzYiIC4AbjvduECmufdAOj8KZgghpAthg449YXuQviQdBasKED4mnHu+uQFHakEqfL/wxbU71wzmnmiXQ5u71swbmiOdwqpCjNo5CgFxAYg8HMkFGoV3CgFo+sUI7TaFjQnDRKeJsJBY8K5r6nMnD56MU9dP8aqrmnMPpGugYIYQQroIoWOYnMocHFpwCOFjwpsdcLA7Ipk3M7H6h9WQucv0joS0e9GYSyqRYu2xtSiqKkK0XzQYhuEGV568fhIMw/DWm1uZy+tv85bfWzi04BCyy7KbdPQkZUSQuYUg6Wmde3g6ETK3EEgZqmbqbigBmBBCugBjSb+JEYmY6DwRF8svNqt1v27Cr1CfmebOOLKJsUHgyEAcWnAI8nw5Yk/HGuwXs/6/6/GS50vc57Yo0Xn9eiiWvwTpMK17uFYI6SefAVu2NPk+SMcw9/ubghlCCOkiTFUZKVVK3nGMuYSmWYtFYgSODETKwpRmrxdoXLOpAEmpUkIsFkOer6lGsre2R8qzKfD9wldwOKXJqiQbG+D+fcDPD3B2BsrKgIwMoHdvoEZ/QjfpnGhqNiGEdDOmqoyaE8gAws3m1Iwadx7cadb1WOw4gtD9oUjIS0DS70nwG+oHF1sXvDL5FUxymcS9lgGD5PxkhMWHgQGDCI8IAMC+efswvN9w7nVFVUVYc3QNjhUeM3FTHkBWFnDypP7jpNuhnBlCCOkiWrPKiKVQKYw2m1OoFIDSvEoiXbqzoHpLe6NeVY/IRyPhM9hHr/mddgLwKPtRYBgGlysuC+YIrZy00shNKYANGwDd4zaRCIiO1jxPuhU6ZiKEkC5AoVIg9WoqQve3bqM87eMd7XwWttmcuuo2LPoPaNHadWciGcq/YY+7xCIxClYVILcy12COUMDwAPSy6GX4nhkGkMuBmBggN1ezIxMdDchk+kEO6bQoZ0YLBTOEkO6AYRi9Dre6SbTN6aDLMAxqG2pha2XLPVZdXw1bqQ1EixYBe/c2a71NXQubX+M/zB/pS9Jb1IlY84EKQCo1/Dvp9KgDMCGEdDNCHW6DRgbh6u2r+PPen83uoCsSiWB9u5r3WK+yPyCaPx8oLGzWWpu6Fja/RgQRnG2dAbSsEzEA/cCFAplui4IZQghpZ7p9YJrSF0Z7Z0OpUuJS+SWM6D8ClhJLHMk/YrCDrtHPUCohLboOzJwJREYCAQGQjnQDEhOblWOi3btGby35wmvRzq+xt7YH0DY5QqR7omCGEELaUWtOu7aQWMDF1gWZNzJha2WLmIyYps1rYoMUCwvA11cTvAwbBmRnA5MnA0lJmhyTJu5oGJ0ddVqzFqHxBOzO0+6Q3bydGt5rqIsvEUDBDCGEtBOjOxamdk8MGGQ3CKkFqQCaeCzDMEBqKuDtrenJ4u0NpKcDsbGaPiyZmUBQULOTZZtbRs4GXbqVUC3pREy6P+ozQwgh7cTUtOs57nOadd3zpecBCPeLYR/nUSg0gUxoqCaoATQ9WUJDNbsxQUGa3RgDOzLmJPaavRYj2J0a7b+LQqVocodj0v3RzgwhhLQjc3dPzMmrYY9q7tbf5eYfmXUsI5UCmzc3BjIshtGUMhs5VjLnmMzYEVHUtCjcrL5p8Pq6dIMk2pEhQiiYIYSQdmROUivDMHigfMB7/oHygV5ejYXEAgqVAlHTorD26NqmDYjMFQiqxGKgXz+Dazf3mIw7IorgHxElRiRC5i5DWW0Z5byQVkV9ZgghpJ3oNr4Ti8R67f1FEPFmFPH6ybjLwKgZSCQS3nXZ/jN37t/BU488BWsLa+65BlUDLCWW+kdB3t6aoyVWeDgUH27jD2YUOD5qSu8X3fffrL6JstoyeDl70VERMQs1zdNCwQwhpLNgA48zxWfwstfLvLlD7G5FSkEKN6OIJdTpVztYUKlVEIs0QVBKQQruK+6jl7QXgkYFQeYuQ3ZZdmMQoZszM28emAMHcKHsIr649AW+ufwNxg4ciw3TN+hN4baLtUNNg/6gRhtLG9RE6T+uO/yyudO3Sc9ETfMIIaQTEolECB4ZjNiZscipyOHlnpwrPQepRGqyxDr4m2B4f+6NSxWXuABIIpZAJBLB08UTo/qPQtGdInya/SnC4sMgz5fjoV4PNR4FSaWakuukJCAqCop930AkFsNzkCd2h+zGzy//DBdbF+74SLuM+reVvyF8TLjefRk6PtOtWqJAhrQFCmYIIaSdMWAEc08+/uljAKaThPv16gcXWxd4OnvqJeNml2Xjde/Xkb4kHQWrChA2Jgyxp2Mxwn4EUq6kaIKJ4GAgKgqYNQvM5s1ILTomOMwxdmYsJjpN5AUkdlZ2OLTgEC+god4vpKNRMEMIIe3MUIl2aU0pANNJwhW1FdgWuM1gMu6R/CO4WX2TC0pG9BsBALivvK+5kI8PUFwMxYN7gtdgd3NW+6xGdlk2L9BJu5YGAPhszmews7Kj3i+kU6A+M4QQ0gGEdl8yijNw7c41bJi+QXA6dtS0KBRWaWYludq7IvJwpOBxVOzpWGQuy8Si7xYBAN574j0AgM9gH03OyqZNAAApgM2HhfvexJ6Oxd9G/w0fZn7IJfyygU5iRCKCRwXj7vq7AKj3C+l4tDNDCCEdQGj3Rc2o8cn5TyBz0y+xZsua1x5dC0cbRwCmj6OcbJ0QezoWg+0G4897f+L5ic9zx1JLE5eafQ1tbKCjvQtDOzKko9HODCGEtAK2Ssec7rhsUzmh3RffIb6oqKvAow6P8kqdq+ur8dSBp5CQlwD/Yf4ATHfZLasp44ISW0tbJOcnIzRe85ls+bY512BLyJ1tnVFWU4aL5Reb9TcipK3QzgwhhLQQwzC4VH4JakaNlIIUk0MkDc0dYndfViSvwKidoxAQF4DIw5H4LPsz2FraYsmEJfAe7I2L5RdRUl2CDX6Gu+wWVhUioziDC0osLSx5eToZxRkmuwbfrL6JAb0HoGBVAdKXpGP/vP1IX5KOX1f82oZ/TUKajvrMEEJICyhUCqQWpMLDwQM5lTlm9YfRfq/2Y0VVRVhzdA0S8hJ4r2N7uCiUDZBaWHKPMwyDI/lHEHs6lmuuFzUtCjJ3GeYfmI/EvEQkRiRi8qDJcLJxgk2MDeoUddz7w8eE49CCQ5Dny3nXiJ6madB3teoqRtiP0Gvgt8FvA2TuMqjUKuohQ9oU9ZkhhJB2IJVIkVKQAld7V5P9YYTeq23hdwv1Ahmg8chHum49AGDjiY0IiAvAUwef4o6jaqJqkLksExOdJ2LRd4tQVlvG7fR8f+V73nVYCXkJmH9gPjydPXnXmOA8ASKRCMP6DkNyfjLC4sP4FVPxmv4z95T34PuFr9FdKJY5s6YIaS4KZgghpIXuKzQlz+YOkdTFMAxq6muwftp64SOfqVFQXCsEKioAAB/++CFOXj+Jw78d5o6jtmduR3ltOQbbDcbeeXuRuSwTwaOCIRaJ8dyE5/BA+QA7n9ypd/3EvERkl2WjtKYUz373LF5LfQ2b0v6qdjIx5dvOyg6WEkuDM5q078/UcEpCWoKCGUIIMcKcHYVxjuMAmDdEUuj68nw5liQuMTwocrQM0k8+A27f1ruemlHj5PWTWHN0DeYdmMc9llORg3+f+jeCvwmG7xe+OHb1GLycvZD1fJZgns7XP3+Nf834F3YE7cCXoV9y1zcVoDnbOnOPCe1CmTuckpCWoJwZQggxgGE0nXo3Z2xuzBf5a16RUq3kfWk/UDzA0cKjTcqZYbHDG8PHhGNb4Da42usMe4QY+Gu4pO6wSqHPeaB8AFsrW+65oqoirD26FksmLMHskbNhKWnMuymsKsTBXw7ijalv8HJj/v7Y37E7ZLfJwZIBcQE4ef0k97jQjKamDKckRBvlzBBCSAsY2lGIuxgHBvrHJjmVOZjjPkd4Z8VEd1x2lyMhL4E7Nlp4eCHWHVuneZ9EohkImZ0NUd09hLiFCPahCXELgYXYAmnX0vTWdnDBQZwpPgNLiSVyK3PBMAzUjBq5lbl4dtyzkOfLebkxn2Z/iqKqIrMqprQJ7UI19/iNEHO1aTBz6tQpzJkzBy4uLhCJREhMTOQ9zzAMNm3aBGdnZ/Tq1QuzZs3ClStXeK+5ffs2Fi5cCDs7O/Tr1w/Lli1DbW1tWy6bEEIE80XEIjG2Bm4VDHKmfD4F58vOI3hUMC+ZNmhkkMnuuLrHRv179ce/H/833n/ife5xhVoJjB8PC7u+iD4erZf46+XihfuK+3pBifZ4gpc8XwIAxGTEQJ4vh1qtxizXWRhkN0gveVnNqLHm6BqEuIfolZAnRSZB5i7DG0ffgJpRc+8xNKOpOcdvhDRFmwYzdXV1eOyxx7Br1y7B599//3189NFH+OSTT5CVlYU+ffpg9uzZePDgAfeahQsX4pdffsGxY8cgl8tx6tQpvPjii225bEIIAaC/c+A31M9o1dKrKa9yOzBKtWbStKlSZbaBHrv7wZZL51Tm6CfMijX/yVYzarx14i28nvo6Dv5yEFX3q+Bi64I+ln0MJuzGno7ljq9Ka0oRczoGFhIL1KvqBe8V0OwULfpuEYJGBvECJ+9B3gCAxeMX6+ff6OxC6d4fi4ZTktbUph2Ag4ODERwcLPgcwzDYsWMH3nrrLYSGhgIA/vd//xeOjo5ITExEREQEfvvtN6SmpuLcuXPw8vICAOzcuRNPPvkktm7dChcXl7ZcPiGkh/v7Y3/Hp9mfcrsPbLKrqWOTjSc2YvLgyZC5yUzuyrAN9E4/dxo/XP0By72WQ54vx4eZH8LV3hXWFtYY0HsAPAZ6cNd6/4n3oVQpwYDRCxxG2I8QzE9h11ZRW4GM4gz0lvYGAOz6aRfe8n/LYCfgwjuFegHZyI9GYtaIWdgWuI2X81JUVaR3v9oNArV71UT7RZv19yHEHB2WM1NUVITy8nLMmjWLe6xv376YMmUKMjM1/8+RmZmJfv36cYEMAMyaNQtisRhZWfr/T8eqr69HdXU174cQQsyhvVOwO2Q3ClYVIHxMOABNa3/A9LFJRnFGk6p1lGolfIf44p2Ad+Bk44TAkYFIW5LGddw9+NRB5Fbmcjs16/+7HmKxWLDc+Zu533DrFVrb8aLjUDNq7vcT106Y7ATM3YNSs9s0duBYLr/n8a8ex7sn38W7J9/F1rNbBe9PJBLp7e6Yc/xGiLk6LJgpLy8HADg6OvIed3R05J4rLy+Hg4MD73kLCwv079+fe42Q2NhY9O3bl/sZMmRIK6+eENIdCfVDya3MxaEFh/CMxzNQqBWoqa/B9tnbEekRCf9h/hCLNP8Z1U2KNdYsz9RnHrt6DGpGjYWHF6KkuoSXo3NfeR8veb5ksNw5OT8ZWwO3cuvSXlt1fTW8B3tDIpIg2i8a1fXVqFfV460Tb0HmLkNShEBujPaxkYWF5tjor6Tg0NGh+OJvX2CT/yZs8t+EXSG7DAZvun8H6hRMWlO3HDQZFRWF1atXc79XV1dTQEMIMYodS8AOYgTAdbtNikxCXFgcN0jSd4gvfIf4AgCu3bmGT85/At8hvtwYAfZY6tdbxmcYKVVK/FzxM7Znbse50nNQM2ruMxMjEvH+E+9jkN0gzDswj1sTm7cTeThSuJnd6RhkLsvES54v4evLX/NGHEQfj8aWWVtwaukp+Az2gUqtwpnnznDvDxoVhDmj5/D+JoLHRu4yZL2QBU9nT8jz5Yg8HKlXuk67LqQ9ddjOjJOTZqx8xV8dLVkVFRXcc05OTqisrOQ9r1Qqcfv2be41QqysrGBnZ8f7IYQQY0x1u5VKpIK7KDmVOYidGYvJgyZj/oH53DiC8DHhegMZtXctFCoFLCQW8HTxRNqSNN5xFpuwO8huEADA3tqe22kxN29nd8hu7kjHw8ED8w/Mx65zmmKMyYMmQ3T+PCz8pgPBwcDGjcDZs5CK+f/7lg3edO9BJBJhvON44VEH1AyPdIAOC2ZcXV3h5OSE48ePc49VV1cjKysLPj4+AAAfHx/cuXMH2dnZ3GtOnDgBtVqNKVOmtPuaCSHdW25lLsQiMfyH+SPCI4I7Rvr11q/GO9nmy3FPcQ9JvycBaKxIulB2QbCFPxsU+X7hi+BvgrHxxEaU1pTi0IJDXECjHaykPJvCBTvm5u3kVOTg9v3b+Prnr7EvZx/uPLjDdSq2KKsApkwBMjOB1FTg3/8Gpk0D5HJA0RiEGBtDYE7wR0h7adMOwLW1tSgoKAAATJgwAdu3b8eMGTPQv39/DB06FO+99x62bNmCr776Cq6urti4cSMuX76MX3/9FdbW1gA0FVEVFRX45JNPoFAosHTpUnh5eWHfvn1mr4M6ABNCdCc6C014Xv/f9XjJ8yVeB96iqiIcKzyGFz1fNNnJdkXyCuzN2YtfV/yKC2UXeEdWACARSVD1ZhXSr6Uj7lIctgZu5X1WTX0N6hR1GLR9ECYPmqyZr/RNMKoeVGmqf9xlWHBwAT544gODE7oTIxIx03UmrCRWetVOdQ11EIlEkIqlkD4dCRw+rHMj3poAB8LHbuxnnHvxHDydPfWmcLOEugAT0hydogPw+fPnMWHCBEyYMAEAsHr1akyYMAGbNmmGmK1btw6rVq3Ciy++iEmTJqG2thapqalcIAMAe/fuxZgxYzBz5kw8+eSTmDZtGj777LO2XDYhpJsxZ9ChUqVEzMwYvf4uOZU5eGHiCwDMO9q5u/4uBtkNwuaMzRCJRLxdnunDpsPWyhZnbpzBwQUH9T4r7VoaHPs4YsO0DVwy8dHCo7zGdx888QH+34X/p0nYFWhmN8d9DnpLe0MsFuOnkp+w8cRGbj7TiWsnYG1hDalECuXHHwFina+A3Mb7M7bz8sWFLwBQMzzSedBsJkJIt2Zsh0F7ZpKx151+7jR8h/ia3Jl5LfU1TB0yFU898hSeOfwMNj++mbfzUllbCQcbB1y7cw2XKy4bnOP0+PDH0Uvai5eDo/05AKBSq6Bm1Lydl9v3b8PO0g4KtQJKtdLgfCZuTlRAAHCyca6S9s4MAIM7L3ZWdvjjjT9MzoiioybSUp1iZ4YQQjqaubkdxl73xrE3oFApDPZiYXdRdv60E19e0kyc/mbuN3o7L1dua8a1DO833GAX4ZiMGPSx7IM9F/fwAhmgcQfo1LVT2Ht5L6QSKVYkr0Dk4Ug8/tXjqFfWw0JiAWsLa6Pzmbggw7lx4jVEIiA6mpczY2iHZezAsbxmeE2dRUVIa+uWpdmEEKLN3EGHhl53ueIyV5KcGJGI2NOxXCkyW/bMlmTXNtRyuzzaOy9ZJVnwj/NHbXQtrC2sTa7pnuKe3nNscDF9+HRMx3Q8UDxA8KhghMaHYvqw6XC2dTb42WHxYUiMSOTmMwEA7O0BGxvAw0MTyMhkmqAGmkZ+22dvx/Q906FiVNxbtBvpSSVSBI0Mwhx34+XchLQ12pkhhHR75uZ2mHrd22lv6w14nDxoMt5OextJvydBBBG2zNxicJdHxahw7Ooxsz7ratVV3uMiiBA9LRo3q2/CLtaO221hc2emD5sOwPgOk/Z8JqVKAezeDdTUaI6WgoIAkYgrqbYQW8B3iC+q3qzCm1PfNLjzQs3wSGdAOTOEkG5NoVKYldth7HWJEYnwcPCA2043iEViZL+QjUccHoFELOFeV1JdgtKaUni6eEIsEhvMN+ln3Q+VaysNrykiCbNHzUZqQSreO/Me7KzsMMllEoJGBsF7iDcvj0YEEbJeyMJjjo/BUmLJXcdUlZFSrYSFWH9jnmEYyPPl2Jyx2WATPKEqMELaCuXMEEIIYHZuh+7r7KzssNxrOc69eA4ydxnePPYmQkeHomJtBcY5jeMCmWt3rmH9f9fjQvkFeLl4oV6pmUJtaOdlzIAxjZ+lOz4gIgkydxmS85PhPdgb6YvTkbIwBe/OeBe+Q31RWadpIsr2wnna42nsubgHlhJLvJ76Om7fv230s9nHhQIZo310tJrgUSBDOiPamSGE9Ajm9JnRflz3+fuK+7CysEJyfjJv54Lt//LUgaewZPwSBI4MxB/3/kB2WbbBaqWgkUEQQww11Hqf8VHWR8gqycKhBYcMftatultwtHHkrXnnTztx9sZZ7J+336zqLSGmqrVa+rclpKnM/f6mYIYQQnToHreMcxyHH579AenX0gWDBPYYalHCIpx57gy+vPglloxfAnm+nJcsHO0XrXdk8/sfvyPtWhquVl3FrnO7oGbUKFhVgNzKXIMBif8wfwR9E4TLFZe5o6AQtxDMPzAfUwZNwbqp6yC/IkdMRozBzxbSnCZ45hxNEdJc5n5/UzUTIYRoEeo3YymxhK2VrdHE2sxlmbCz0vzHtq9VX65Tr/aOhm6lj1QixSMOj6DobhH25e6DtYU1Fo1bZHyQZEYM5rjPgaXEkncUlBiRiK2BW+G20w3nSs/ho+CPeJ9d21Br8t49HDwEd2YMHVsZHM65P5R6zZB2RcEMIaRHMnQ0IlQNZO5wx0kukwAA88bOg+8QX3yb+y0sJBawFFviRa8XBb/YRSKRXnmzOZ/FrgngB1SBIwNRUlOC86XnMcd9Dhc82VjaoKa+Br0sesFCIpwzs2H6BsGkZO1SbG2mevjo3hMhbYUSgAkhPY7geIOCxvEGuoGEucMdZ4+cjYraCpRUl8DZ1hkrJ6/EK5NfwdIJS3mv150ord387rXU18z6LHZNLHbNKQtTNDOdRgXjfOl5vXEJ2hVYumtoThM8c3v4ENKWKJghhPQobNXO9sztcLV3hZeLF86VnkNofCgyb2iOZXQDiYziDBRVFRntAFxdXw2fIT4Y2GcgSmtKoWbUuFR+CWpGjZSCFKNzoRQqBYLdgvFt7rfY+dNOk59VWFWIjOIM3nPaay6vLUdKQQqmfD6FV5kUFh/Gq0zSxe4SaffRCRoZZDT3heYzkc6AEoAJIT1OSXUJBtkN4n4vqirCmqNrcOveLZz4+wnBaqC5Y+bi4IKDSL6SLJhYW1FXAQD4qeQnPOrwKHIqc7h/GqtqYnc8GIbBhfIL+OLCF3Dv745/eP8D8nw5Yk7zPyvELQRPHXgK3+V9Z/R6za1Magpze/gQ0lyUAEwIIQIYhkF2WTbmHZjHCxIOLTiEzRmbIZVIEeIeoje2YPH4xQAg2L7/36f+jbRraTixWBMI/W303/DB2Q/wt9F/M5nIy15DKpHC09kTniGeUKgUuHr7KjwcPHiBB3u0tGTCEpTWlgpWKrEN8drj+Ef7aKqplVOEtCYKZgghbaIz9B4RWoPu3KJzpefwYeaHGGQ7CK97vw4A2HxqM54d9ywvkCisKsSi7xZh77y9AMNwM4ykEimSryRzYwLuK+7z/mkqqGDzd3RLm0PcQrDg4AL8ce8PONs6o6ymDBnFGXjD9w38a8a/DM5DYhviNbUyqbmEEphpPhNpb5QzQwhpdYIJtjp5Iu29hhXJK/Sqb8LHhKNgVQHSlqRhnOM42FjaAAA2+m/U/PPERkQejkRAXADcdrqh8E6h5uJaX9Ql1SWI9otGZa2mO28vaS/eP03llGTeyOR13T1Xeg7bz27HxbKL+Cj4I5y5cQbxufE4ef0k1Iwau87tMjkPia1MEsq5YSuTWhPNZyIdjYIZQkirMrctfnuvoepBFYDGHZHwMeE4tOAQ/rj3h2CSbk5lDt6Z8Q7qlfU4ef0kGIbBR8Ef6a2/n3U/bpo2m8hbVFWEoFFBRhN5o/2i0aBqwJH8I4LBlaeLJ1xsXXD9tesIHxPOvdecnZXmViYR0lVRMEMIaVWmeo+0xxep0Bq0y6vFIjG2BW6DPF+OAb0HQJ4vR1h8mH7lT74c2wK3wXeIL7JeyIKXs5fejtOJaycgggh5f+RhY9pGhLiF4I97f0DmLuP+mRiRyAsqEiMSEeIWgp8rfsbmmZsRPiacC65yKnN41z9feh6HFhxC+JjwJu2sNKcyiZCuiqqZCCGtrjlt8ZvKVE6O7hrEIjEKVhUgpzIHH2Z+iLQlaViRvAK7Q3abVfkj1O0WaJx0/YjDI3Db6YbQ0aHYFrgNrvauBuc8FVYVYu3RtUjMS+RGIYggMlj5lBiRiInOE3Gx/CIl1pIehaqZCCEdpq2TTw0lzWp/0euuQc2oseboGhxacIgryzY3SRcwseN0OgaZyzLhN9QPCXkJSPo9CX5D/eA/zB/vzHgHUokUH2Z+iPOl51FSU4KM4gyoGTUAcJ17AXCVT+xU7IDhAQCAo1eP4m+j/wanPk4UyBAigIIZQkirak5b/KZe39Q8IAAG1wAADz/0MAB+kq6x4EulVkEilpgMeh53fZwLVE5eP4nssmy8M+MdAMDGtI2Cu1Xa18ytzEX4mHD8J+Q/6N+rv97Ok1jEzwwwtPNDU6tJT0M5M4SQVtWWyacMw5iVkyO0Bt8hvogLi0NyfjL6vdcPpTWlXJLutsBtiPSIhP8wfy5g0A6+sm5qAh1TlUmb/Dfh5us3sS1wG/yH+WOc4zi91xh6LwBsn70dhxYcwsA+AwW7BotFYqz/73q9CrFL5Zfg+4Uvgr8JxsYTG3Gu9Fy7Vo4R0tEoZ4YQYpam/q//1t4tUKgUuFxxGZ4unmbn5Ah9Jpsfwybc3lfcRx/LPtzz1+5cwyfnP8HUoVMhc5PhfOl5+HzhgyurrhjNaZkyaAqUaiWvs3BNfQ3qFHW4r7iPnMoczP12LqYNncb1jTldfBoJTycgaJRmN0l7rWxX4oS8BO5zkiKT8MhATW6OmlFz+TpeLl54oHzA9bphP9vQUElCugpzv79pZ4YQYlJz+sY0t/eIbqUO+7tUIsUXF78AYP48IKHP1D0qOlF0Qq8kO3ZmLIJHBkMkEmFVyiqoGBXWHF1jsDJJ5i7DwD4DkV2WzbtW+vV0OPRxwIFfDkDmLkPVm1VIX5KO/fP2I31JOqrerILMXQYLsYXe3zenMoerYgIad55G2I+A31C/xsdOx8DZ1hmlNaVmD5UkpLuhnRlCiFFGq3hac/6OSgVGLIY8X24wsdcu1g4/v/yz2fOOhKxIXoE7D+5ga+BWnC89b/I62rtA4WPCuUolVmFVIXpLe+Onkp8M7tpMcpkERxtHJOcn691b0Mggg39fttKJ3Ylhd54iD0ciPjceQONu1DOHn8H+3P1N/nsQ0pnRzgwhpFW0R98YhUoBBdQmm+15OHgY3CExJydHoVJgd8hu7Ju3Dy62LojJiDF5X9q7PQl5CRi1cxTePfkuACD4m2A8/3/Pw8nGyeC1Yk/HwtnWWa/Tb1ZJFraf3W707xt7Opa3E8Ouhe2Zo/1YaU2p0fsgpDujYIYQYlJbDi1kGAbnSs6ZFTRtDdyKxLxEzD8wH486PMprCDd75OzGsmWFTlM5pZJ3VLY0calZ96VUK/XGAqgZNdKK0gAAVQ+q4GjjaNa1UgtS9e7NydbJrPc62zpzCcmFVYXIKM4A0JikXFRVxD0m9H5CujsKZgghJpmbo8IylPci9Dp5vhwfn/sYgP6XL9tvZcyAMQAAn8E+SIpMQlltGcZ/Oh4rklcguywbDMPAUmKpeRPDAKmpgLc3YGMDTJsGhaKet+tTdKfIvPtigBC3EL1doNd9XudK0Mtrys261vnS83rPaXclNvZee2t7bufps+zP0Fvam7cb9Wn2p1zfGsH7IKSbo5wZQohRCpUCqVdTBXu2COVkMAxjNO9Fl/fn3rC2sEb6knReJ16h/BSFSgERRLwKHV7FkkIBnDsHfPwxUFoKDBgA5cc7YeHkzLu2djdgUx13Q9xCcKvuFrcDA2jyZM4Wn8XCcQtxofwChtgNwY83fzSaf+Mf54/Mm41TuNl1FL9WjAvlF0z+fQ3duwgipFxNMfvfDyFdCeXMEEJaRVP6xjRnyGRuZS4yijN4QxkNzSlKvZqqV6HD+3wxAF9fYN8+ID0dim/347r0Hvc5LLYbsLHqpAO/HMD2s9shz5ejTlGHx796HJGHI/H4V4/jq0tf4YmRT0AkEsHT2RMOfRwwx32Owb+RSq1ClF+U3sBJhmFQWlsKmZvpHCCpRKpXZs0+RkMlSU9HOzOEELOY2zfGnDlHQq9nA5jMG5l4eMDD+O2P3+Af5w8Vo+Jea2y3QXBHyG8DQtxDIBaJsSJ5BaoeVKGspozr0hs+Jhw7g3fyesPcV9znOgMDQEl1CQbZDUJAXAD69+qP/4T8Bw59HPQ+a+eTOzHecTxvXbfqbsHW0hbWUmvN+q7IEZMRw70n2i8aMjcZahtqYW1h3aK+PNQFmHRH5n5/UzBDCGlVTRkyqX2EFTYmDLtDdsPJxol7XrdxHCAcFBkrH896PguPOT3WmFPz13W/vPglrlZdxcpJKzFl0BR8cv4TrJi8AvJ8/YBjjvscHMk/Apm7DHUNdUi7liZ8pBSRBE8XT7xx9A2MsB+Bd2a8w5Vjj7AfgQ+e+IAXON1T3EMvi144kn8EW05vQV+rvvBy8UKwWzB8BvvQHCbS41Ewo4WCGULaT1N3ZhiGwfmy8/B09hQMJGTuMsw/MJ8LaAxN3hb6XHa3R6i/i3YOj0KlwH3lfaRfSzeY9zJ75GycLzkP36G+Ju/x8a8exxd/+0IvJ0csEmP60OnYGrgVzrbOYMDgQumFtu/hQ0gXRTkzhJB2x1b46OaGaM850iUSiTDecTyS85MRFh/Gy7UJiw+DPF+OrYFbuZlJuhU6SrUSgHAl1LbAbQZzeI7kH0FRVRF8v/BF6tVU2Fra4uyNs4Kl4SlXUmApsURKQYrgZ7HYxwOGB8DV3lWv94yaUSP9ejpeSXkFLrYuGGQ7qM17+BDSE1AwQwhpNc0dMmlu4zgRRIieFo0Hygfot6UfvD/3xk8lPwHQD3L8hvoJBhTa13W1d4WlxJJLUH7J8yW9ydQAcF95H0BjebW5perm9Ocx9ZoesHlOSItRMEMIaVUikQhBI4N4De2CRgaZzP8w9aU+fdh0JEYkIsQ9BNYW1lg6fimedHsSJ4pO4L7iPjZM34CAYQGI8IiA/zB/DLIdZNZ12eOemIwYuNq7ct12tfWy0CQE362/y6u64t23VlO79GvpAMwLeky9JvNmpsE+PYQQDQpmCCGtrjlDJk19qb874114OHhg0XeLAADvP/E+NvlvwlvT30IvaS8EjQxC2pI0bojjjqAdZl2XbVzHBjcuti6814kgQrBbMBQqBdZPW4+1R9caHafw5/0/Ua+qx7U71wwGPVHTolBdX230WC5qWhQKqwrxxrE36LiJEBMomCGEdDhTX+rlteV4/KvH4bbTDUP6DhGe4l2QCjWjxjOHn4H35974seRHk9ctqS7BmRtnADQGN69MeoUfpERoghQxxJC5y7B4/GJEH4/GOMdxvN2nwBGB2PHjDrjYuODMc2cwvN9wg71n5rjPgYXYAhZi4R4xbK+btUfX4nLF5fb5l0BIF0bVTISQTkGoD0vUtCheNZNEJEHVm1VIv5Zucso0wzDIej4LXi5eOJJ/BLGnY/X6u4hEIhRVFWHt0bVYMn4JgkYF4fb923rdfv+89yfGO42HhdgCtQ21sLWy5Z6/p7gHawtrLDi4AId/O8yrWBrVfxSUaiUe6v0Q93q2/4t2HxjdnjCFVYVYe3QtEvISDFaBEdITUGm2FgpmCOnEFApAKvylXl1fjZiMGOw6twseDh7YFrgNvkNMl0YHxAXg5PWT3O+VdZVw6OPAve5m9U2sO7YOhVWFXPk3AGSXZuOh3g/h+f97Ho42jlyDvcmDJiNzWSZUahXUjJq3xpvVN/Fqyqu8XjjaazlTfAaeLp7cTgx32zrBzLnSc/j4p49RWlPKNfWjEm3S01FpNiGk89MZCin18wfOntU8Dk3i7ZZZW7ijnMmDJgMwL6lX+/cbd2+grKYM2aXZmBE3A8N2DMP+3P1c+XfylWRU1FbgtR9ewwj7EVAzasTnxuPk9ZNQM2ruOhKxBFKJFAd/OYify38GAHjs9kDS70nwH+bPJR+LRWLuPT5DfGAlsULKlRS90QwMw0CpUkIqkcJnsA8iH41Evapeb5AkBTKEGGdh+iVt65///Cfeeecd3mOjR49GXl4eAODBgwdYs2YN4uPjUV9fj9mzZ2P37t1wdHQUuhwhpBMSbLUPMZCVBYSHA6q/RhZkZgLTpgFJSUBwMKQWUqxIXoG7D+5id8hulNeWY/SA0fBw8BDcmdFN6mV/n+A8AWKRGOHfhuu9j61kylyWCTsrzf/yc7Z1hlgkht9QPzjbOsPe2p639qceeYr7/eqrV6FQK/Q6F3+a/SkAQKVW6XUnZnvdJEYkImB4AGzFtlwV2Bz3ObzPoi7AhJjWKXZmHnnkEZSVlXE/p0+f5p57/fXXceTIERw8eBAnT55EaWkp5s6d24GrJYQ0hWCy7tVUMGIx4OsLxdUrmoCm8Q1ATAxgYQGFSoFnxz2LMQPGoK91X3yU9REUKoXRKqHCqkJkFGfwfk/+PRmA6R2dSS6TAACj7EehYFUB0pekY/+8/dgdshv1ynq9e1n/3/Ww72WPcyXnePeXU5mDmJkxaFA1mOyhY2dlx5VfN6cKjBDSSYIZCwsLODk5cT8DBgwAANy9exdffPEFtm/fjscffxyenp7Ys2cPzp49ix9//LGDV00IMcXYFO0j+Udws/omUu/ngDl0iB/Q5DYGHb5DfLHRfyMA4OvLX+P2/dvCpdERSZC5y7DxxEZMHjSZqwhad2wdvAZ5ATBdph00Kgj3FPfwzox39CZ2Hy08CgYM4i7FIaskC/eV9/GS50uC98ceXbEBl6kgKrUglQIXQlqgUwQzV65cgYuLC0aMGIGFCxeiuLgYAJCdnQ2FQoFZs2Zxrx0zZgyGDh2KzEzK7iekI+k2chNq7GZqV2Kw3WBs//FDyPPlUGzfCoj/+k/SypW8XZDgb4IBAGMHjsXy5OUAgBnDZ/BKo2ePmg2xSIy98/Yic1kmZrrORPTxaNQp6uBs64yS6hKjze5qG2rhM9gHFmILwdEKoftDIc+X44PAD7gjKGMdhrec3sIFKH9/7O+CnYXZIOpc6Tlz/+yEEAEdHsxMmTIFcXFxSE1NxX/+8x8UFRXBz88PNTU1KC8vh6WlJfr168d7j6OjI8rLyw1es76+HtXV1bwfQkjrMXh0JFAcaWpXwsnWCTFnYiEdPgJ4+23g8ceh2LiBt+NxtPAo13k3MS8R8w/Mxx/3/uDWcrb4LB7/6nEEfxOMjSc24uyNs+gt7Y0ts7YgZaFmntIbx94Q3NFJjEiEzE2GXpJeuHH3BiwllmaNVtBNMtYWPiYce+fu5X7fHbIbBasKED6mcfdJ+xisup7+G0VIS3R4MBMcHIynnnoK48aNw+zZs/H999/jzp07OHDgQLOvGRsbi759+3I/Q4YMacUVE9KzGTs6kl+R6+3QmNOBlwsINm0Cjh8HrK1x5sYZLqBQM2qsOboGMncZTj93Gh4OHliVsgqVdZWQ58sxPW46LMQW6NerHzKKMzB9z3TIr8jRoGrgPq+wqhDzD8zHow6P8nZ0JjpPhEgkgkQiwdB+QwGYVy2lm2TMYid1X664zAv2citzcWjBITzj8QyvMd4bR9/A+mnraWQBIS3Q4cGMrn79+sHd3R0FBQVwcnJCQ0MD7ty5w3tNRUUFnJychC8AICoqCnfv3uV+bty40carJqTnMHZ0pDvp2Zx2/RnFGVxAEPxNMLfLEzMzhreTIRaJcefBHfgO8cW7M96F/Bk57K3tcefBHVxZdYVL1k1fko4rq67gTPEZWEosoWbUqKyr5HZ1Ru0chYC4AEQejsSMuBm4WHYRN6tvwi7WDiuSVwAwHYA9POBhiEVivTlN2pO69Y6p4kORfCUZcWFxyFyWiUkuk/Bt7rdY47uGyq8JaaFOF8zU1tbi6tWrcHZ2hqenJ6RSKY4fP849//vvv6O4uBg+Pj4Gr2FlZQU7OzveDyGk9ZgzDRowPEVbu10/wzBcYHO08CgvP2Vr4FaIRWJsmbkF++ftR/9e/blrl1SX4Prd63h23LN6ybpsNREAXCy7CJVaxR0xTR40Gdll2bh25xpW+6xGiHsIXk15FTUNNfg0+1MUVRVhg59wABbtFw2FSoFN/ptwYvEJ2FrZQubeeH+BIwON5tGwwZ5SpYSzrTMiH42E7xBfKNXK1vjXQkiP1eHBzNq1a3Hy5Elcu3YNZ8+eRXh4OCQSCSIjI9G3b18sW7YMq1evRlpaGrKzs7F06VL4+PjA29u7o5dOSI9lzjRoltAU7YnOE7Hou0Uoqy3jBTZqRq0ZBzBsOs6XnscI+xHYOH0j1k1dp5ejk12WjWF9hwnugoTFh2mSilUKfHnxSzjbOuPttLf1jpgmOE/gRiUAjcdZIe4hgjOVQtxCsDFtI7eGzJuZmkGUI4ORuSyTy88xFez9XPGzWflGhBDzdPg4g4iICJw6dQp//vknBg4ciGnTpmHz5s0YOXIkgMamefv37+c1zTN2zKSLxhkQ0noUKgVSr6YidL/+bCRzWu+rVCpIJBLu96KqIqw5ugYJeQkIHxOObYHb4Grvyj1fr6zH0atH9WYxBQwLQNqSNJOjDUL2hSD5mWREHo7EgV8OIHBkIBd02MXaoU5RxyX0suMLIh6JQFxYnN5ohaWJS/Fd3nfC9wwxIBIBYrHJNc2Im4H06+lN/tsR0tN0mXEG8fHxKC0tRX19PW7evIn4+HgukAEAa2tr7Nq1C7dv30ZdXR2+++67JgUyhJDWZejoyFjrfe3kVolEwvvdUmIJoDFxVvvIaEXyClhZWAnm6LjYugAwvQvi6ewJQJNorGbUuPPgDveaFZNW8JrjpS9JR8GqAgzpO4S7D5Va05046JsgXiAD6OQJMQwgl0NxvQgbphkuAb9ZfROnik8Zvg4hpMk6fJwBIaQL0BoGCQAilcrs1vtsGffmjM38qdXuMkQfj8bUIVNxaMEhrjIpLD6MC1yqHlQB0A9YwseEY2vgVgAwOdpg9sjZel2B7ynuwVJsiZiZMZDnyxF5OJK3tpiZMVCqlLCQWEAi1uwi9bXqC7FIDDWj5n0OtzYLCyAmBlIXF8gOHUJSZJL+BHA3GRZ+t1DvGkL3SAgxX4cfM7UHOmYipAX+2nHA5s2azrweHsCGDYBMpjlWMUKhUujNJQI0uxSJEYnwcPCA+053nFp6Cr5DfOH7hS8sJZbckY9YJMaJxSd4xzbsDo48Xw5PZ09kl2XzAiDt6wcMD4CNpQ0WfbcIhXf+mpDtJoNSrUSDqgEnik4Iro098gH4IwW0j8RY7NERAMDGBqirAzZtgmLTW7z3llSXYJDdIL17ZCdk865DCAFg/vc3BTOEEMMUCs1U69BQbpI1AE0Q89cwSFgY3+A1lT8SEBeA6cOm490Z7+LanWsY3m8495qiqiL0lvbmknpFIhEKVhUgpzIHYfFhCBsTxgU2sadj+Ts/bjIo1AruGAsAFLf/gLT2HjB0qFlrO1N8BmuOrtHbUWKThvVyXby9ARcXKD7cBumwxryfspoy/CP1H9gZvBO9pb1ha2XLu8e1R9diyYQllDNDiA5zv7/pmIkQYphUqtmR0f3fPGFhwMSJ/EBG5yiKZU4DOqlECoZhcLniMiIORegFD2z5c8qVFLjauyLycCQYMEjIS8D8A/OxLXAbb1ejtqEWAPQrhPr2Bfra663B0Np2ndvFBTtsQJUYkYhtgdtQUVeB9dPWQ+Ym0xyvKRTAzp1gPD2Rmi/H5s/5R1fx8+MBAMn5yXpHbgcXHIQIIpqQTUgz0c4MIcQ49uiEFR4OHDoEZGYCP/wAPHgA9OoFzJ4N+PjoHT2Z2v14/KvH8XX417hQdsHgcdRM15mQiCSwllprlhRjgzpF45q0ZyXtCd2DhYcXIuLRCMwYPgOBXwficsVleDh4YMP0DY3Bh5lrS7uWJvgcAL1J19rHaiKRiKuSqqytRGJEItKvpRs91qJdGUL4ukw1EyGkk/PQ6h0jFgP/+Q8U9+uAqVOheHsj8P77wDvvAL6+UDy4BygbG8CZ0wFYBBEG2Q0yOg+pj2Uf/O/l/8Vrqa9plqTTz0bNqHHy+knk/ZEHACipKUFMRgxsLG1gKbHUG7mgVCmhUCkMDp6MmhZlcLyA9m6ObvDBdkcOGxPGq5I6vvg4bK1sze6cTAhpGgpmCCGGKRSaZF92tyU6GoyDAy5V5UHNqJFSkMJv/nbjBBitHjKmOgB/lv0Z3n/ifQCaEQH+w/z1pktrl1h//NPHeiMEWLojErSPsVhs4GAhsdCszdDgSXdNibmjjaPen2TlpJVGJ4aPsB+hV2K+8cRG3r3ookomQlqGghlCiGFSqaZqKSlJs/Pyj1cgz5djSL8hSM5P1p8/9NcYAu0vd6EOwMGjgjVjCmZt4XZZ9oTt4fq8aM9kYp+f4DwB3z39HT7N/lSTQxNheESCmlHzBllq0w4coo9H63UF9nDwQPTxaABAeU05771zx8xFzMwYoxPDP3jiA72uxBnFGbx70WXocUKIeShnhpBuSiifo9lHGVrJvUd+P4I5o+eYzDdh+7QIfbZSpYSKUcFSYgl5vlywB838A/ORmJfI5ZNYiC1Q21DLVQLpXrOwqhBrj67lqozY0u/n/+95ONo4cmXQkwdNRuayTK6TcXh8OKYNncaVSp8uPo2EpxMQNCoIKQUpXJXUOMdxSF2YajzvZcRsSC0s9f42YpGYV4VFOTOEmIdKs7VQMEN6GoZh9IIE3eTXphAKhHSTcLnHLW1QE1VjcC2vTH4FMTNjUNdQh7RraQZ7xEx0nogLZRcgc5dBrdY0mWPA8NahqroNcd9+yLz5I9747xtcom+0XzRC3EJQWVcJJ5vGjuFFVUX44/4fGO84nqugkl+R85rbRU/TBFMikUjwvk0FcYb+Nmx/nOQryfzP+6uMnCqZCNFHwYwWCmZIT2KsUV1zdgB0g5G/P/Z37A7ZbdaXuu5a2B2K0ppSTB061eQ1btXdwo4fd2DzzM3I/zMfbv3dIPr9d+Ddd4HSUiAjAwgN1evrolQpIRFL9AM6vw1coKL999KdwfRc0nP4494fcLF1gUMfB9yqu4W3A96G+0PuZgVxhu7rzalv4l8z/tV6O2aEdHNUzURID8VW1LRG1YxCpYA8X47Q+FAu/+PT7E9RVFWEDX7CVUrRftFoUDYIroUtn04tSAVgOiH2oV4PYZP/JgCA+0Pumt2SEcOBhgbg5ElArQYSEiAdMQpYsULz5jffBANGb91ZJVkIjddUM2nn9Oj+PWwtbbF4/GLUq+pxJP8IskqyEPFoBNz6uwEwnfeiLC8zOJtp6tCpeu+jQIaQlqNghpBuqLWqZoQCIzWjxpqjaxDiHiJYpRTiFgKpRArV/Xu8zxSLxHjc9XEAwPnS8wBMBwYikQhHrx7lJ9teOwbmwAFg2zbA319TLq5WA19/rXnz6NEtCuiEEpaDRgZxx06GSs2jp0ZBca0QFq+s0iQoP51o9iBOQkjL0DETId2QOUdA5rKJscF95X2uAVxZTRnO3DiDktUl6GXRi9eav7CqEG8cfUPTmn/I45D26gPvz73hYuuCbYHb4GqvOQry/cIXe+fuNZgQmxiRiMCRgTh29Zjp47KiImDNGqCsTNPILz8fcHeHXawdJjpP1JuBpJvT01SCeTZ+0ZC5hUA0/yngu++A8HC9oy86TiKk6ShnRgsFM6QnYat0Qve3Ts7M+v+ux0ueL3GBCACU1pTCxdaFG5qonVtSUlMChVqBM8+dgVKlxMXyi/B08YQ8X44tp7dg37x9uFxxGV9d+goHFxwUnKsU4hYCsUhsOihbsQIICtKUj2dnA6NHA7a2gEjEDXZksUMiy2rLWjzQUbBSTGyhGcgZE6MZyDluHPDBB4JdkQkh5qFgRgsFM6SnMbx70LSqGaVKCbFYDHm+/rXmuM/Bwu8W4oHyAW/XBQA3MFJ97x7UVpZIKUjhdli0q3rOFJ/By14v84ZLltWUYX/ufqz2WW062Xb7dmDdOuDUKWDyZE3QIJEIVnOxJd/ZpdkY7zS+bXZJdOdTGZhXRQgxDwUzWiiYIT2Bqb4ypo45hF4vgogLRLRnDZXXlGO172r4DPZB/1799YId3TLwkuoSrEpZhYS8BC6YqWuo4x1RVdRW4OOfPkbM6RhMHzodaUvSTO7MqKpuQ119V+8451L5JUz5fIr+zlREEoJGmdiZooCEkE6DqpkI6UEYhjHalRYwXjVj6P0SsQRnbpzRmzWUtiQNE50mop9VP71ut2wn4CP5R1BUVQTfL3yRXZaNQwsOYd7D87AtcBvk+XLYv2ePjSc2Qs2ocab4DOYemIsdWTswedBkvO7zutHZSdF+0bj74C7E/eyRej9Hb92eLp4IGxPGv0cwiDmtSf5VqpQQxDBAairg7a0ZsOntrfm9+/9vPkK6NNqZIaSLa2lfGVPvn+wyGQP7DDR41BR1PArvnXlP77rs7klAXABOXT+FxIhEeLl4wcXWhbfjEj4mXO+YqrSmFMcLj2PhuIV6TeaipkVB5i6DSq0yuG62+6/bTjeoGTX3nNHkX4UCOHcO+Pjjxh42ADB9OrB1K/DYY4CFhfF/GYSQVkU7M4T0EC3tK2Ps/VtOb+GOkXR3X8LiwyC/IsdLni/pDYcEwBv0yE6/drF14T1nyMDeA7HosUVQqVV4fPjjerOT/pn2T6Prjj0dixH2I+A31I/3nLEZSAoxAF9fYN8+ID0dirISKMtKgbQ0wNMTsLAwOEmbENKxKJghpBvQ7uXiP8wfER4R8B/mj19v/dqk9+uys7KDVCJFTEaMwWDJ1d5VL2gAoDfoUfsz2OfY/BntCdPen3sjtSAVakYNqUSKJ75+AgFxAYg8HImAuAC47XTDlaorRtctNDGbnapdXV+tF5QIHrPdOQfxwIFY/9/1Bo/uCCGdAwUzhHRh7Berh4MHwseE8/Ja0pek49cV5gUzhnYsJrlMAmA6aGB3XFhs4FBYVag3MVqhUmCD3wZIRBIuf0Yv5yY+FMn5yVCoFMitzMXJ6ycRnxuPk9dPAgAc+zgaXTf7uL21vd5Ubd3dKqEux9oTwF/0fBH3lfcbH9PpIEwI6XgUzBDSRbFfwkVVRdgZvFNwh+NC2QWTOwnGutoGjQoCYDpoWDlppV4nYJm7DGuProWaUTeOOVA14FL5JYS4h+DU0lNwtXdFTEYMRCIRb0dJJBJxybrPjnuW+zw2YNsRtMN4N16/aNxX3MfukN2846n5B+Zj17ldvNc35biquSMhjP1OCGk5ymYjpItiv4QH2w3G/nn7kZyfzOumy+5wmEoClkqkkLnJkBSZpJfg6zPYh6sqEurUG+0XjbqGOrjYuvAa0VXXVyP6eDSOFR6D92BvXo+bVSmr8MSIJ/B2wNsAgBH2I7B/3n5eAnBRVRHeOvEWAGDZhGX47dZvmDN6Dl7zfg3yfDk+zf4Uq31WC647aloUZG4yRB+PRubNTL0OwN6DvfX+Bk05rmrKSAj2+Kq1ppcTQoRRNRMhXZhNjA28XLyQviTd7CnWQr1nlColGDAGn2Mb52l36mWrigBAni9HakEq7ivvw2ewDyI9Ink9ZKrrq9HbojcsJBawibHBnNFzsH/efgCaWU9ClVIydxnEIrHemstry+HQxwHyfDnO3jir13SvrqEOD5QPNCXlAgGYUHBn6m8XEBfAHXGZOxKitaeXE9ITUdM8LRTMkO5C94vd+3NvuNq7Yv+8/Sa75Qp1xd355E54OXtxgUpfq77wcvFCsFswfAb7cLsHDMPgnuIe+lj24a5bWFWIg78cxJLxS9C/V3/eugqrCrHn4h4UVBWgrKaMG2/ArtnawhrpS9JRr6zH0atHBb/ws57PgpeLl96aN0zfgBC3EDx14Cl8l/cdxCIx/Ib6wcXWBa9MfgVeLl6wlFga74IcFaUpwR43DopjPyC1JF1w/INuiXdTA5HWnJFFSE9EwYwWCmZId6AdjPx661f8tvI3XCi7gO2Z283qlnu2+Cym7ZnGfWGLRWIUrCpAbmWuWbsHSrUSFmILLE1ciqI7RRjQewAOPHUA8nw5zpecx7uPv8s9xx7psNiASqlWIuVKCr76+Svsm7sPlhaWgusWi8Qofq0YF8ouNKmPDHuvbCO+ic4TeQFYdX01bKU2EM2fDyQkaB6cOxfMoYOQ6/SzYWdERR+Pxq5zu5o1EsLkOAZCiFEUzGihYIZ0dUJHFtyMo/xkTHSeiOyybIMTqINHBcM/zh+ZNxt3A/yH+SN9STo3LFIot4S3e8AwgEgE78+9ca70HApWFXBTr6cPm272URcbfFws0wygFPrCZ9fWlOMfoDFIyC7LxjiHcaioq8Bgu8F49+S7OFF0AqeLTyNhwXcIsvaAdKQboP4rEHrzTSg2/0twnIOFxIL3WFOOhmhnhpCWoaZ5hHSg1q5gEaq4SchLwPwD8zHReSIG2Q3CHPc5SIpMEqwqkkqkuFxxmXdNNql137x9vHLuglUFCB8Tzk90VSgAuRyK60XY4LcB04dO5yqRGDDIKM5AUVWR0fED7N/gVt0tJOcnY+3RtQCEK6XYtTUlMVf7Wl9c+AJSiRQvyV8CAPz2x284ef0kVIwKMWdiIR0+Ali1ChD/9Z/AXbv0ghSpRMoLZNjHzGWq2oqqmghpPRTMENLKzJmT1BxCX+wJeQkYu3ssAKCirgK+g3153XKDRwWjQdkAQD9oGGU/CgzD4HLFZd5acypzcGjBIayctLLxxVIpsHkzpJ9/CZm7DFsDt+qt6cuLmucylmbAd4gvF1AlRSZB5iaD9MpVAICjjSM2Z2zGqeJTBgOg8ppywTWzdBvyAfzeNntz9gIAPJ099V7HrXnHDqCgAAgPBzwMdwZuLu0qMe0Ak/t7UPIvIa2GjpkIaUVtWcFi6siCYRgwYJB5IxOpBak4X3oed+vvIspPU6p8vuw8pvw/zSRpU/kyiRGJCBgegF4WvRrXa2MDzJkD7N+P8tpyONk4wftzb7jYuujNVtI+jlGoGiC98DPg4wNlWSksBjpwR0vsUZlQpVTwqGCkXk0VTMxNikyC/zB/BO8NxuWKy7zqqvkH5qOstgyZyzJxpvgMnG2debk13BHPihVAUBAgkwHZ2cD48W0yHbup08sJIY0oZ0YLBTOkPbVFnoRCpTD6xR40UtPczlQglXo1FTEZMehn3Q8pC1OattYvvgB++QXYvh1vn3gbr0x5BdfuXIOni6deabVeL5WNGzWDG/39gXfeMTlosqS6BOnX0vHMo89orn1aeNCkbgXV2qNrkZiXyAVjNpY2mH9gPhLyEhr/Fk8nNubMMAyQlKQJatogkCGEtAwFM1oomCHtqa0qWIyWGv8VNJgKTpQqJS8PxNRa2QomltAug8EAKiIJs0fNhqXEsvH114uAvn2RWnGG9x6xSIzpQ6dja+BWONs6Y/iO4Tj89GE8OfJJqKHmfebN6psoqy2Dl7MXAOBC+QV8ceEL7M3Zi7EDx3J/E5VahYsVF/FqyquNf6+pmkCIV83k7Q1kUjIuIZ0RBTNaKJgh7aktK1hMHVk0NZAyp5x79dHVjTsufhsQ4h6CZ797Fv2s+2F3yG6T11iRvAL/+/P/at4/LZrXaC/mjH4Tvujj0Zg6dCovSNMNwvjHWIb/JnrPXSuEdPXaxkAG0Byf1VCZNCGdEQUzWiiYIe3FnOOg1s6X0P7Cbkogpb1WkUgEv6F+cLZ1RnlNOVb7rob/MH/0f68/VIyKdx9sj5eNJzZi77y9JgOoyMORiM+N596f9HQigh2nglEqIR3oKHgfbZJXsmIF8OmnjeXYLNqZIaTTotJsQjpAu1awKJVc5ZTvF764dueaWaXR2o/L3GTIeiELxa8Vc+XZaUvSEDQyCEl5SbxABuAPX3To4wCgaRVHDBjEnImFhf1DXCCjVCsB8MuepRJp65a3KxRAcLAmR0abSARER2ueJ4R0WRTMENLKRCIRgkYG8Uqkg0YGte5gQYaBov4+5L8fQWh8KDJvZmL1D6shc5chMSLRZCDFMAxSClLwzeVv4OXshQtlF/RKyReOW4jwMeF6H82WNv8z4J9Ge6mwZdIZxRmC71czanz989e4r7jPe16hUrR+ebtUqqlaSkrS7MTY2Gj+mZSkeZySfwnp0uiYiZCuRqEAzp0DfH31jpWEKoN0j28ATdVT+LfhuLLqCtfFt6kjA1jsmAXtiiN2FIB2JZHu+3+79RvGDBiDI/lH9CqhtGcvaa+pxUd1CgU/cNH9nRDSqVDOjBYKZki3s3Ej8K9/CeariEViBI4MRMrClMYHlUowEgkyb2TCd6gvb9hjU0YGsFVKE5wnYOyusRg7cCy+Cf8Gw/oN4wUYD5QPkFORgymfTzEYJFlJrHD9znV8fO5jlNaUcmMUmhJIEUK6N8qZIaQ7O38egHC+ippR486DO40PaB1JfXzuYwCaox5zRwZMHza98cgqIgkh7iF4NeVV1DTUIKskC+4fu+NS+SXUK+u591pbWMPLxcvgeIWsm1lw6OMA36G+3DgFdoyCdl7OqsmrEOERAf9h/hCLxAbXSgjp2SxMv4QQ0uncvauZkzQtGqHf6h8RsQm/UjWAc+cg9fXF5tMxsLawBqAJgtjEXA8HD8GdGTZQenfGu3h3xrsAND1edI+OGDB4NfVVZC7LxLpj6/D+E+/j3yf/DYVagbemv4U57nO41xZWFeKDMx/gjalvIDk/GZszNvOOpg4tOIT5B+bjWOExAMCOoB3ce4uqivBp9qet8/cjhHQrXWZnZteuXRg+fDisra0xZcoU/PTTTx29JEI6hkIBREVBunotZO4yJD1tJOFXKgVSNMdNuZW5vIGQp4tPGx8OOS0aN6tvImRfCA7+chAAMHbXWL0cGPbaALhgqbS2FDuydqCyrhJni8/imcPPICAuAKM/Ho0FjyyAPF+O0PhQZJVkoU5Rh6ySLITFh0GeL8fWwK0Y5zgOALAieQVvZlTMzBgoVco2+9MSQrqmLpEz8+233+Lvf/87PvnkE0yZMgU7duzAwYMH8fvvv8PBwcHk+ylnhnQ7DAPI5cCZM1CseBnSocO5p/R6tKxbB7z/PlYkr8Cn2Z8idHQoNw/p7I2ziJkZIzgbaY77HL0KLJNN9m6chZfjRFhaWmsttbFzsbljFM4Wn4WTrRMvZ6Yte/UQQjqnbpUAPGXKFEyaNAkff6w571er1RgyZAhWrVqF9evXm3w/BTOkW9KtxFEqAQv+ybFuYFNUVYQ1R9cAAK/qSfd1f977E0q1Eo42Wk3tGh7gUmUOpnwhnNQbMDwAtpa2EF29CrzwAuDkBJSVAQMHQrH3a0i1AhxTjfbUjNpoJRQhpGfoNgnADQ0NyM7OxqxZs7jHxGIxZs2ahUwDXTvr6+tRXV3N+yGk29EtKdYJZIR6teRW5uLQgkPoZdELzyY8i7M3zoJhGNxX3sfBXw7iXyf/hbxbeejfqz+ySrL4fV6KjsFrkBeyXsjSO9aa4z4H9xT3cL7sPBSuw4DVq4Fr1zTTqG/ehPTnHDAMg9///B2A6UZ7m09tNnqcRQgh2jr9zkxpaSkGDRqEs2fPwsfHh3t83bp1OHnyJLKy9Leq//nPf+Kdd97Re5x2ZkhnYWrGUmtc39QEbalEioraCkjEEgzoPYB7zQPlAxy7eszs4ZHlteXY9dMuxJyOweRBkzU7J7q7RH/tIilVSjBgTI588I/zR+ZN/f+xQjszhPQs3WZnpjmioqJw9+5d7ufGjRsdvSRCOK3e3VaAVCJF7OlYXrBgIbbAq1NexQPFA0glUuy5uAcD+wzE2RtnubWsSF4BawtrbM7YzHsv8NcogtMxsJRYYt2xdYg8HImAuAAM2j4I/874N9SMunHnRGeXiN1FkogluFR+CSFuIQY7FVfXV2P9tPVmj2UghJBOX5o9YMAASCQSVFRU8B6vqKiAk5OT4HusrKxgZWXVHssjpEmEdkyySrIQuj+0Scmtujs57I6H9mP75u3D6h9WIyEvAVtmbsE/pvwD1tLGvJWF4xYiuzSb1/236kEVANO9Z6wkVtzwSG2Gjo907z1sTBi2BW7j7bI0qBogEomwKmUVvpn7DRIjEvWSkrUnaRNCCKvT78xYWlrC09MTx48f5x5Tq9U4fvw479iJkK5AKpEa3vXIiDErkNHd2Vn/3/UQi8V6uz2XKy7j0IJDOLXkFNZNXYcLZRfg+4Uv9/wPV3+Ap4snwsaEcdfW7j0jhH08eFSQ0Z0T3d0TpUrJu/eEvASM2jkKAXEBiDwciRXJK7ijq8KqQsw/MB+POjzKm2810XkiBTKEEEGdPmcG0JRmL168GJ9++ikmT56MHTt24MCBA8jLy4Ojo6PJ91M1E+lMTFXyGKO7syMWiVGwqkBwvtLcMXMRFxYHWytb7jG2mikhL0FwbICx64kgQtLTiQiynwSLgY6aeUxnYnlN72RuMgCAPF/Oa4i368ld8HTxNHnvSrUSKQUpCN0fCpFIBL+hfnC2dUZ5TTlW+66msmxCephulTPz9NNPY+vWrdi0aRPGjx+PS5cuITU11axAhpDOxtSuhzG6Ozt+Q/3gau+KmIwYXuARPiYcBxccRNq1NN5uTU5lDg4tOKQ3NsBvqB8AzSiENUfXaJrx6YwiSIpIgsxdBunylRDNn4+gXo/qTQZXqVWCDfHWHl1r1r1biC0gc9N89uRBk5Fdlo1rd65hte9qvcnfhBDC6hI7My1FOzOks1CoFCYreUx9YS9NXIqiO0XIKM7AgkcWYP+8/bwdD1O7K9q7Mb2lvVETVYPIw5FcDowIImQ9n4VHHR/lOvqya5deuAS8+iqQmwuMGwd88AHg4wNoHf8INcQTi8Qofq0YF8ovmHXvbV3tRQjpGrrVzgwh3YVUIuV2HgyOIDCAzUPZE7aHG8w4yn4UAP6Oh6HdGgB6uzHs++yt7XnDID1dPPHsd89iRtwMZJdlczkvGD8eyMwEamqAM2eASZN4gQwgnDysZtRYd2wdZG4yg1VM2veu+3egQIYQYkynr2YipLsRiUQIGhnEG8CoUCmMJreySb+6gxnfmfEOKmorEO0Xze3CmDsN28XWBREeEXigfIDdIbuxO2Q3gMYEXLZp3Svfv9JYdaTbqE/3dwDjHMfBUmIJZ1tnlNWUIaM4A2pGjcI7hRCJRPBy8eJVMZm6d0IIMYWCGUI6QFN2HgyVc4fFhyExIhE+g324HJeYjBjceXAHgOlp2CsnrYTPEB8sOLgAf977E1sDt8LZ1hmjPx4NpbpxmGNTuu4qVUr88OwPeknHa4+uxeLxi1FYVYiHdz2M5V7L8eqUVzHMbhjtuhBCWoyOmQhpZ7ply6Z+N1bOHXs6FgP7DERNfQ0mu2i676YsTIFCpcCG6RuMlk872zpj/oH5OPzbYZwqPoUvLn4BF1sXrJy0EmJR438azElMZknEEqRfS9dLOj644KAm4MpLQuGrhdgRtAMj7EdAIpFQEzxCSItRMENIOzLV/Vf3+Y0nNgIwfWS0InkFXLa7ICAuAM8cfgalNaUG81NC3ELw7sl34bbTDQl5CQgfE46CVQXcMdOOoB0oWFWA+WPn4x9T/oG9c/dCpVKZvDeFSiFYyRQWH4bkK8lQq9V4zfs1XCi70KbdjwkhPQ8dMxHSTkx1/509cjZ+KPiB93xGcQYA4SMjsUiMReMWAQAG9hkIADh5/SQA4Prd6zi5+CRmDJ+Bv43+G28N0cej8d6Z9wBoSrgPLTgEeb4ckYcjuXycDX4bcGD+AV4ui6mKImM7SFtOb0HQyCAu2GlJ92NjqAqKkJ6JdmYIaSemuv9aSiyRUpDCez6jOANFVUWI9ovmHRkZ2k15y+8tRHhEwM7KDhYSC9hY2uDsjbPYlLYJIftCUFlXialDpkIEEcQiMbYFboM8X46w+DDebkpofCjk+XLcrL4Ju1g7zQ5KgekdFEM7SHZWdq3S/diY9ph5RQjpnGhnhpB2ZOq46L7iPu9xtondoQWHuATfEf1G4Ou5XyM5P5nbTXll8ivY4LcB/3r8X9x72V2JSS6T4DvEl3vcxdYFSZFJSLmSAld7V0QejjQ4VJIdI3Dy+kmExocKTs3WZijpeJLLJLPuv7laa+YVIaRrop0ZQtqRqQ64vaW9ucfEIjH8h/nDysIKn1/4HEEjg5C5LBNxYXFIzk/mclMCRwYiZmaMXrdfdldC90ucLQ1nd3VMBRhsqbf21GwhxpKOg0YFmXX/zdXWuz6EkM6NghlC2ok5FUZbZm3B3DFzuWOk9CXp2D9vP170fJF7vfYXt9Gjov2hkF+RC1YLaX+5mwow2OGTgPEdFGMNAX0G+5h1/y3RVrs+hJDOj8YZENKOGIaB/IocMRkxegMaRSIRaupr0MeyDwDNsMbUglTcV9xHL2kvBLsFc69jxxf4D/NH+pJ0wRECAOA92JvXoA7Q9IKxkGhOmI2NV9AdQmnoerqMJeGauv+WaMrfgBDSNZj7/U05M4S0I6Huvzerb2LhdwtRWFWIaL9ozHGfg5LqEngP8uZVIhVVFeFG9Q0M7TuUy00xt9svwzAQiUR6gcY9xT3NbkpEEmJOawUY06Ihc5fh/TPvc4GM9g6KoRlKgPGGgM3pfmwOdtdHKCjTXTMhpPuhYyZC2plUIoVSpUR2aTZmxM3AsB3DsD93P9eTRX5FDkcbRzjYOAAArt25hvX/XY+cyhwMthusKa/+q7qJPQIydVT0+5+/C1b7nCo+BQYMJg+azJuA/YjDIzhfeh4Lxy2EnZUdr0fNxrSNLaoWaou5Sy2ZeUUI6fromImQDmLqWCT4m2Dcrb+LD574AD5DfPDPtH/imUefwZiBY6Bm1JDny/Hemfewd+5eXK64bHRCtpXEChfKLvCqfXRf8/z/PQ9HG0dunhIb4LCq66uxNHEpvsv7jvf+zlQtRH1mCOleaGo2IZ2cqaOhJ0Y+gb1z92Lq0KkQi8R49/F3MbL/SNQ11CG7NBuPOjyKM8+dwfB+wzHHfY7erkRiRCJk7jLsubgHg+wGGR2JMMJ+BNSMGvG58Th5/STUjFpvfUHfBPECGfb9xqqFTI1qaG00bZuQnomCGUJakTlf3uxmqKmjode8X0NOZQ6/3LogFb2kveDp4omcyhysSF6BpUlL8f8u/D8EDAvgHRV5OHhg/oH5KKgqAGB+CbbuOliXKy4bfb/QfVITO0JIe6AEYEJaCfvlvTljc+NYgOkbeJU6bHM3topH6GgoaloU7ivu41jhMd7zbGfexIhETB40GY86PMpLEG5QNSDvVh7ePfUuSmtKkVGcATWjRsCwAACmp2hrl2Cz69A+pjH1fm3UxI4Q0p5oZ4aQVmBoyKJurxe2R8yao2sgcxceBClzl6GXtBdiMmIMHgs52Thh2f8tQ0BcACIPRyJ4bzAsJZYYPWA0Ih+NRL2qHr2lveE92BurfVeb7PFSXV8NhVqhd0SlXbXUlB4x1MSOENKeKAGYkFZibp8TtkdM+JhwbAvcBld7V+45hUqBY1eP4Un3J7nX6bKxtEFNVA0iD0ciPjde7zMMJcEyDIMj+UcQezqW2zmKmhYFmbsMVfer8FDvh7j3FFYV4rPsz7Bl1hbusab2iDG1fkIIMYX6zBDSTtgeLuZ2oGWPaxLyEpD0exL8hvrB2dYZ9tb22B2yG0P7DeW9TpfusZBuLxVDSbAikQjjHMfxAqvCqkLMPzAfx4uO4+76u9iZtROHfzuM08WnkRCRwAuMmtojpinHUoQQ0hJ0zERICyhUCmTe0AQH5swd0j2uUTNqnLx+Et/mfotgt2AoVAqMfmi08WOdadG4WX0TF8svNrmXyjOHn+GOpgLiAuC20w0JeQkYO3AsAOD7gu9Rr6pHQkSC4DWFfhdKelaqlG06uoAQQrTRMRMhLeT7hS/2zt2LnMocwYRe3YRXc49rGIaBPF/O68wbNS0Kc9zn8F5nqiMv+xg7uiA8PhzThk6Ds60zymrKuF0Y7TWa25+FXaNQ0jOANhtdQAjpGcz9/qZghpAWsomxQeDIQBxacAjyfDkvJ8XQl7e5zd2u3bmG4f2Gc78XVhVi3bF1qFPUIWVhCn7/43csTVqKyxWXBauntIONEfYj8M3cb1DXUAdbK1vumjX1NbCxtGlygCFUsQTwAzgA1MSOENJslDNDSCsxFXh4OHggIS8B8w/Mx7bAbbycFEM5JeY2d3vm8DOwlFhyuyhsubX3YG8AwMvyl5F5U/N5uqXPAHjBhoutCwAg/Vq6wZ2Upty3qYol7dwaU/dJCCEtQTszhBhh7BiFHdyoPXVaLBLDb6gfXGxdsHLSSgzrNwyD7QY367ONTbROikzCBKcJGLZjGDcIkqVd2cRWWIlFYhSsKmjaUZiR+2ZRxRIhpC3ROANCWsic3jHsgMPTS0/Dd4gvekt7o15VjwiPCPgM8UFZbVmzk11NDU9cd2ydXiAD8KunHh7wMPyH+cN/mD9c7V0N9q7R7v1ibs8cwLykZ0IIaWu0M0OIEeb2jgH4xzA3q2+irLYMXs5eLU52NXTcY2htb059E/+a8S/eeyprK+Fg42D2Too5921q54i6/BJCWop2ZghpBaZ6x2w8sVFw7tBgu8EY7zieN8aguQyVQwuVPs8dMxcxM2P0ZiJduX0FgPk7Keb0zDG1c0SBDCGkvVAwQ3oehcL471pMfflnFGcIHsOcLT4L/zh/Lpi4VHGpVSdICwUSvkN8ERcWh+T8ZL0jIv84f9TU15jd+8XcoIdtpKc94DJoZBCVXhNC2hUFM6RnYRggNRXw9gZsbDT/TE3VPK7DWOO6qGlRKKwqREZxRuOltXJPNpzYgMybmahT1MHF1gWezp6tPkFaN5A489wZ2FrZClYYqRgVNmdsNmsnRaFSINov2uB9C81hMvY7IYS0NcqZIT2HQqEJXEJD+cGLSAQkJQFBQYCU/0VsqMFdiFsI5h+Yj4S8BN7rdecmNbWKqDWYyosxp8eNmlHr9cxh5ziJRfS/gQgh7YP6zBCiSyoFNm/W34VhGCAmBpij3xfF0Dyi6OPReoEMoD83yW+oH1ztXRF5OLJJ/ViaQ6lSwkJiYXImkjk7KdHHo/GS50t6c5yij0fzhk8SQkhnQP8Ti/QsucKJrQYfh/CX/dShUw3mntysvskdPznbOmsub+YQyuZiGAYpBSkoqS4xeERk7kwkhUqBqUOnwm2nG2+Ok/tOd0wdOpXmKhFCOh0KZkjP4mGg/4mhxwWYquIpqy3jcmHYHRpzE2qbEyho94VZlbIKMncZEiMSm11hxN5fQkQC6lX1kOfLjQ6fJISQjkY5M6TnaEbOjNHL6eSaKNVKWIgteHk2v976Fb+u+BUXyi4IzzCKSMIE5wkYu2ssxg4cK9hl1xzafWHCx4RjW+A2uNq7Glxrc+6P5ioRQtobDZrUQsEM4TAMIJdrcmRyczU7MtHRgEymCWqaQehLXwQRLCSNKWmCicTTohHizk8kZpOCZ4+cDUuJpdlr0E36ZccquNq7Yk/onmbdFyGEdDQKZrRQMEN4FAr+Dozu701g7gwjQD/ouVl9E6+mvKqXSMx22WUYxuwdmqZ0KiaEkK6COgATYohu4NLMQEZ3htF95X1YW1hjf85+ZN7MNNmPZeyusYIVUWxS8IXyC2Yn7JrbDI8QQrojCmYIaSapRMo1qAsfE46CVQVIX5KOffP2wXeIr8n3jx04VvBxNin41LVTTUrYpbEChJCeio6ZSLfXlomsNjE2CBwZiEMLDkGez8+JMXbc9ED5AGnX0gw20pvlOgu9pL2MrtnUfVHCLiGkq+sSx0zDhw+HSCTi/WzZwm/IdfnyZfj5+cHa2hpDhgzB+++/30GrJV0RwzCtPkZA2zjHcdgWuA3yfDnC4sN485C0ZzVpk0qksLG0MVpCnVuZa3TN5twXBTKEkJ6iQ3dmhg8fjmXLluGFF17gHrO1tUWfPn0AaCIyd3d3zJo1C1FRUcjJycFzzz2HHTt24MUXXzT7c2hnpmdSqBRILUgVLoluhTECCpUC50rPwXeIb7MScJUqJRgwvDU8UD5ATkUOpnw+xeCaAbTpfRFCSGfRJXZmAE3w4uTkxP2wgQwA7N27Fw0NDfjyyy/xyCOPICIiAq+++iq2b9/egSsmXYV2Tos27YGQLb2+z2AfAIY7+Y7oN8LgtGwLiQWkEikYhkH+n/n4nx//B9YW1liVssromtv6vgghpKvp8GBmy5YteOihhzBhwgR88MEHUCqV3HOZmZmYPn06LC0b+23Mnj0bv//+O6qqqgxes76+HtXV1bwf0jO19RgBNh9GqMNv+JhwfD33a5PHQUq1EiP6jcA/vP9h9pofHvAw/If56w19bK37IoSQrqRDg5lXX30V8fHxSEtLw0svvYSYmBisW7eOe768vByOjo6897C/l5eXG7xubGws+vbty/0MGTKkbW6AdHrmjhFoKu3dFqHSaLFIjG2B25Ccn8yVbmvn0hzJP4KiqiL4fuGL1KupkIglUKlURte2ctJK7nP3hO1B+pJ0FKwqQPiY8Fa7L0II6YpaPZhZv369XlKv7k9eXh4AYPXq1QgICMC4cePw8ssvY9u2bdi5cyfq6+tbtIaoqCjcvXuX+7lx40Zr3BrpYtqq/4pu8u3GtI0IcQvhlUa/5PkSXO1dDR4HxZ6Ohau9KywlllyisBpqg4Mi546Zi5iZMXq7PDmVOTi04BDCx4RTXxlCSI9lYfolTbNmzRosWbLE6GtGjBgh+PiUKVOgVCpx7do1jB49Gk5OTqioqOC9hv3dycnJ4PWtrKxgZWXVtIWTbke7/wpvjIBfdJPnH2mXOYtEIng4eMDF1gVZJVl478x7uPLnFcSFxWGO+xze+0wdGTnbOnO5LnPc5+DLi19iw/QNSIxIROzpWORW5mKc4zjEhcVxuzxscJRVkoWw+DAkRiTio+CPsHTC0mbNdSKEkK6u1YOZgQMHYuDAgc1676VLlyAWi+Hg4AAA8PHxwYYNG6BQKCD9q0vrsWPHMHr0aNjb27famknn1dLeKSKRCEEjg3hBhkKlaNIXPrsToz2yINovGocWHOLmKn2X9x3K95bjzHNneO/1cPAQrHJij4PYqdpscNOgasD8A/OxLXCbXhWUsV2ezGWZcOrjRIEMIaRH6rCcmczMTOzYsQM///wzCgsLsXfvXrz++ut49tlnuUDlmWeegaWlJZYtW4ZffvkF3377Lf7nf/4Hq1ev7qhlk3bUWj1idIOfpgRDuiML2LyXsPgwyPPl2Bq4lUvCvVxxmfe+mvoawSMjEUSImhaFwqpCZBRnAGgMboLdgpGYl4hRO0chIC4AkYcj8a+T/wJgepdHe7AlIYT0JB0WzFhZWSE+Ph7+/v545JFHsHnzZrz++uv47LPPuNf07dsXR48eRVFRETw9PbFmzRps2rSpST1mSNdkKIgw1IiuOdc39Lv2/22sDDr2dCxG2I+A31A/APzkW/Z9Qo3xEiMSIXOXYe3RtVAzal6ui89gHyRFJmHyoMnILsvGtTvXMHPETL3razP0uLF7JISQ7oTGGZBOqyWToI0dTxmbdA2Ae+7hAQ9jT9ge2MTYoE5Rp/cZNpY2qImqQeThSHyb+y2SIpMwe8RsZJVkwW+YHzfqYFvgNrjau3Lvq66vRkxGDHad2yWYwyO0dgBIvZqK0P3mNcozd5o3jUAghHRm5n5/UzBDOi1TQYQhxr7IVWoVUgpS9LrnSkQSVL1ZhfRr6dxz/sP8kb4k3WRQtSJ5BYJGBUHmLkN2aTa8XLwgEom494lFYvgN9YOzrTNG2Y/Cy14vY5DdIO465gYQDMNAfkVuMpnZ3M7H5gY8hBDSUSiY0ULBTNfUnJ0Zc77I/eP8kXmT/36hwEUsEqNgVQFyKnMMDoRkA4PCqkKsPboWiXmJSIpIwqwRs3Cs8JjB9wWPDG5Wjou5Oymm/nZtPeqBEEJaQ5cZZ0CIkOb2iDGn1f+0odMQ4RHB66DrbOsMgJ9kq2bUWHN0jcGBkCFuIdj5004ExAXAbacbEvISNJ9zOga9pL2MDpJsbrKuucnMppKFaSQCIaQ7ofIH0imZ6hGjVCt5r9feoTA1J+n9JxonrxdVFWHN0TVcibRuKXVCXgLmH5iPncE7ebtBCpUCz373LPbn7tf7HPbzd/y4A+FjwvXe1x5HOKZKwrXXqYtGIhBCuhramSGdFtsjJnNZJmqiapC5LBPBI4MBwGjJdlPmJLEddAf0HoCa+hrB3aDEvERkl2WjrqGOC6LYoyUh7Of/3+//xyuxXpG8ol12PEztailVSt46ddFIBEJIV0M5M6TNtEWljKlcj9kjZ+OHqz/wqn7Y3JfcylzB9yVGJCJgeABsLW0BAEfyj3Dddz0cPBA1LQoydxmij0djy6wtjeswVF0UkYRHHB6B2043qBk1b33tlYtiKlnY6PopZ4YQ0klQArAWCmbaX1tWyphKbtX9Il80bhF2h+w2O6H42p1rGN5vOPc7m9x7rPAYr4rKWMBwvuw8Xk15tVkjFForCDR1HXOrowghpKNQMKOFgpn21dxKGXO/xM0p2RZ6r7ml3r5f+MJSYglnW2eU1ZQhozgDakYtWEVlaM3NDUjau1ya+swQQjozqmYiHaY5lTJNGV1gTq6H0GeY8z6FSoEovyicun4K8bnxOHn9pF6XXt17Ffq9OSMUDHU9jrsYh9qGWr3XtoaWjHoghJDOgoIZ0iaaUinTlNEFzS3ZNvd92lVUQiXVbfllLxQEho8Jx8EFB5F2La3FM6oIIaS7omMm0iaa2vCuKa9vbq5HU97XUccv2kdhTWnaRwgh3RHlzGihYKZ9NadSpqmjC5oabLQ0l6W9aAd15o5TIISQ7opyZkiHac5RTVN7njQl10M7H+eh9x/CiuQVyC7LBsMwnSqQ0T0KE+pKrI2a2xFCiAbtzJA2Y+4uSFv2POlqM4i0j8L6WfdDysIU2pkhhPRYtDNDOpy5uydtmXTb2jOIdBOMW6uqiKXd9ThlYUqzE54JIaQnoZ0Z0mm0VT5LU/NxhChVSkjEknbtAcOi5naEkJ6KEoC1UDDTsxk6pvEd4oszz50x+X6GYVDbUIu0a2kdVlXU2ROXCSGkLdAxEyEw3F9m7pi5SF2Yqvdaofdn3siErZUtYjJiWu24qqmouR0hhBhGwQzp1oTycd6c+iYOLjiI9GvpJhvRSSVSpBSkAKCqIkII6awsOnoBhLQ1Nql2jvscAJrdluT8ZF6FE9txWOjI6HzpeQCaMnGh4ypD5eOEEELaB+3MkB5BOzhpaoXT3fq7KKoqQrRfdJtWFbV1pRQhhHRXFMyQHsncIyN28OTao2shc5chMSIR3oO9YWdlh+Vey3HuxXOtMrOpKYM2CSGE8NExE+mRzD0yYnNuACD6eDRe9noZmcsyW7W6SKixn7FjL0IIIXy0M0N6nKY2omNzbrbM2oLh/Ya3+i5Kazf2I4SQnoaCGdLjNKfjMPuYQqWAPF+O0PhQZJVkoU5Rx+2iyK/IuUCoqfkuVClFCCHNR8dMpEfSrXACNAGIqY66pnZR5rjPwYrkFQh2C25Sh16qlCKEkOajnRnSYzW3EZ2pXZSqB1XcTk2DqoH3GkON+Wj+EiGENB8FM4Q0kaHdEvbxspoybqfGUmKJFckrTDbma6tBm4QQ0hPQbCZCmkChUiD1aipC94fqzWhKjEiEh4MH3Ha6Qc2ouUGWkYcjEZ8bz73OUIUSzV8ihBA+ms1ESBswtIuSGJEImbsMa4+uhZpRA+Dv1LCMVSjR/CVCCGkeSgAmpImEkocLqwox/8B8JOQlaF4DEaKmRaGwqhAZxRm891OFEiGEtC4KZghpBu1dE4Zh8MutX1BWWwYbSxt4OHgg2i8aIW4hmH9gPrdTw6IKJUIIaV0UzBDSQkI7NQ2qBmSXZSMxL5H/Wq0KJTpGIoSQ1kE5M4S0At3AxFJiCS9nL6pQIoSQdkA7M6Tb6SxVQc1tzEcIIaRpaGeGdBq6zeGa0yyus02fpgolQghpexTMkE6hNYIQc+cmEUII6V4omCEdrrWCEJo+TQghPRMFM6TDtWYQQtOnCSGk56FghnQKrRWEmJqbRAghpPtps2Bm8+bN8PX1Re/evdGvXz/B1xQXFyMkJAS9e/eGg4MD3njjDSiVSt5r0tPTMXHiRFhZWWHUqFGIi4trqyWTDtQaQQhNnyaEkJ6pzYKZhoYGPPXUU1i+fLng8yqVCiEhIWhoaMDZs2fx1VdfIS4uDps2beJeU1RUhJCQEMyYMQOXLl3Ca6+9hueffx4//PBDWy2bdIDWCkJo+jQhhPRMbT41Oy4uDq+99hru3LnDezwlJQUymQylpaVwdHQEAHzyySd48803cevWLVhaWuLNN99EcnIycnMbjxoiIiJw584dpKammr0GmprdMu3Rt4VhGMivyBGTEYPcylxuJIDMTdbkviydpc8MIYSQlun0U7MzMzPx6KOPcoEMAMyePRvV1dX45ZdfuNfMmjWL977Zs2cjMzPT6LXr6+tRXV3N+yHN0159W9gGc5nLMlETVYPMZZkIGhnEBTJCPWiUKqXQpai3CyGE9DAdFsyUl5fzAhkA3O/l5eVGX1NdXY379+8bvHZsbCz69u3L/QwZMqSVV98ztHffFkNBiFBAlVKQArFY3GHN8AghhHQeTQpm1q9fD5FIZPQnLy+vrdZqtqioKNy9e5f7uXHjRkcvqUvqDH1bDAVUYfFhkOfLUdNQQ4m9hBDSwzVpNtOaNWuwZMkSo68ZMWKEWddycnLCTz/9xHusoqKCe479J/uY9mvs7OzQq1cvg9e2srKClZWVWesgxnV03xZjAVXs6Vj8bfTf2mUdhBBCOq8mBTMDBw7EwIEDW+WDfXx8sHnzZlRWVsLBwQEAcOzYMdjZ2WHs2LHca77//nve+44dOwYfH59WWQMxzcPBA1klWYKPt5eODqgIIYR0bm2WM1NcXIxLly6huLgYKpUKly5dwqVLl1BbWwsACAwMxNixY7Fo0SL8/PPP+OGHH/DWW29h5cqV3K7Kyy+/jMLCQqxbtw55eXnYvXs3Dhw4gNdff72tlk20dJa+Leb0oDGUDEwIIaT7a7PS7CVLluCrr77SezwtLQ0BAQEAgOvXr2P58uVIT09Hnz59sHjxYmzZsgUWFo0bRunp6Xj99dfx66+/YvDgwdi4caPJoy5dVJrdfK1ZMt0cCpUCqVdTEbo/lHfUJIIIiRGJCBgegOr6agy2G9zmayGEENK+zP3+bvM+M50BBTMt09F9W4QCqqhpUZC5ywAAi75bhL3z9rbbegghhLQPc7+/m5QzQ3qmju7bwvagmeM+h3tMoVKgsq4SK5JXoKy2rF3XQwghpHOhYIZ0GWdvnMXxwuNgwCD9WjpOXj8JhmGQFJlEXX4JIaQHo6nZpEuQSqTwGeyD8c7jkVKQgnOl5zB50GSau0QIIYR2ZkjXYei4qT0SkQkhhHRetDNDupSOzt8hhBDS+VAwQ1pMaAgkIYQQ0l4omCEt0l5TtQkhhBBDKJghzcYOgQz/NhzWFtaYM3oOrC2sER4f3iZTtQkhhBAhlABMmk0qkeLMjTO4suoKXO1duceLqorwafanvERdQgghpK3QzgxpkZiZMcipzOEdM+VU5iBmZkxHL40QQkgPQcEMaTb2mCksPgxZJVmoU9QhqyQLYfFhkOfTMRMhhJD2QcEMaTapRIqYjBjeAEgAYMAg9nSsXtk0BTeEEELaAgUzpEVyK3ONPr7xxEaqciKEENKmKJghLeLh4GH08YziDO74KXR/KFU5EUIIaXUUzJBmU6gU2DB9A0TgjxMQQYSoaVEorCpERnEG9zgDBjEZMdS1lxBCSKuiYIY0m1QihcxNhqTIJHgP9oaNpQ28B3trhj+6y7D26FqoGTXvPYaOpQghhJDmoj4zpEUMDX+MPh6NhLwEvdcbOpYihBBCmot2ZkiLCR0bTR06VfD4KdovmnJmCCGEtCoKZkirM3r85CajnBlCCCGtio6ZSJswdPwkEomMvIsQQghpOtqZIW1GdweGdmQIIYS0BQpmCCGEENKlUTBDCCGEkC6NghliNt0qJKpKIoQQ0hlQMEPMwjAMUgtS4f25N81aIoQQ0qlQMENMUqgUkOfLERofiqySLJq1RAghpFOhYIaYJJVIsTljMxjwd2Fo1hIhhJDOgIIZYhZDM5Vo1hIhhJCORsEMMYuhmUo0a4kQQkhHo2CGmKRQKbBh+gaatUQIIaRTomCGmESzlgghhHRmNJuJmIVmLRFCCOmsaGeGmI1mLRFCCOmMKJghhBBCSJdGwQwhhBBCujQKZgghhBDSpVEwQwghhJAujYIZQgghhHRpFMx0c7oN7ajBHSGEkO6GgplujGEYpBakwvtzb9jE2MD7c2+kXk0FwzCm30wIIYR0EW0WzGzevBm+vr7o3bs3+vXrJ/gakUik9xMfH897TXp6OiZOnAgrKyuMGjUKcXFxbbXkbkWhUkCeL0dofCiySrJQp6hDVkkWQveHQn5FTjs0hBBCuo02C2YaGhrw1FNPYfny5UZft2fPHpSVlXE/YWFh3HNFRUUICQnBjBkzcOnSJbz22mt4/vnn8cMPP7TVsrsNqUSKzRmbwYC/C8OAQUxGDDW8I4QQ0m202TiDd955BwBM7qT069cPTk5Ogs998skncHV1xbZt2wAADz/8ME6fPo0PP/wQs2fPbtX1dke5lblNepwQQgjpijo8Z2blypUYMGAAJk+ejC+//JKXz5GZmYlZs2bxXj979mxkZmYavWZ9fT2qq6t5Pz2Rh4NHkx4nhBBCuqIODWbeffddHDhwAMeOHcO8efOwYsUK7Ny5k3u+vLwcjo6OvPc4Ojqiuroa9+/fN3jd2NhY9O3bl/sZMmRIm91DZ6VQKbBh+gaIwB8EKYII0X7RlDNDCCGk22hSMLN+/XrBpF3tn7y8PLOvt3HjRkydOhUTJkzAm2++iXXr1uGDDz5o8k3oioqKwt27d7mfGzdutPiaXY1UIoXMTYakyCR4D/aGjaUNvAd7IykyCTI3GeXMEEII6TaalDOzZs0aLFmyxOhrRowY0ezFTJkyBf/6179QX18PKysrODk5oaKigveaiooK2NnZoVevXgavY2VlBSsrq2avo7sQiUQIGhmEOe5zuMcUKgVEIpGRdxFCCCFdS5OCmYEDB2LgwIFttRZcunQJ9vb2XCDi4+OD77//nveaY8eOwcfHp83W0N3o7sDQjgwhhJDups2qmYqLi3H79m0UFxdDpVLh0qVLAIBRo0bBxsYGR44cQUVFBby9vWFtbY1jx44hJiYGa9eu5a7x8ssv4+OPP8a6devw3HPP4cSJEzhw4ACSk5PbatmEEEII6WJETBu1g12yZAm++uorvcfT0tIQEBCA1NRUREVFoaCgAAzDYNSoUVi+fDleeOEFiMWNqTzp6el4/fXX8euvv2Lw4MHYuHGjyaMuXdXV1ejbty/u3r0LOzu7lt4aIYQQQtqBud/fbRbMdCYUzBBCCCFdj7nf3212zNSZsPFaT+03QwghhHRF7Pe2qX2XHhHM1NTUAECP7DdDCCGEdHU1NTXo27evwed7xDGTWq1GaWkpbG1tUVNTgyFDhuDGjRs98sipurqa7p/un+6f7p/un+6/o5djFoZhUFNTAxcXF14+ra4esTMjFosxePBgAOB6rNjZ2XWZf5ltge6f7p/un+6/p6L771r3b2xHhtXhs5kIIYQQQlqCghlCCCGEdGk9LpixsrLC22+/3WPHHdD90/3T/dP90/3T/Xc3PSIBmBBCCCHdV4/bmSGEEEJI90LBDCGEEEK6NApmCCGEENKlUTBDCCGEkC6NghkA9fX1GD9+PEQiES5dutTRy2k3f/vb3zB06FBYW1vD2dkZixYtQmlpaUcvq11cu3YNy5Ytg6urK3r16oWRI0fi7bffRkNDQ0cvrd1s3rwZvr6+6N27N/r169fRy2lzu3btwvDhw2FtbY0pU6bgp59+6ugltZtTp05hzpw5cHFxgUgkQmJiYkcvqV3FxsZi0qRJsLW1hYODA8LCwvD777939LLazX/+8x+MGzeOa5bn4+ODlJSUjl5Wq6JgBsC6devg4uLS0ctodzNmzMCBAwfw+++/4/Dhw7h69Srmz5/f0ctqF3l5eVCr1fj000/xyy+/4MMPP8Qnn3yC6Ojojl5au2loaMBTTz2F5cuXd/RS2ty3336L1atX4+2338aFCxfw2GOPYfbs2aisrOzopbWLuro6PPbYY9i1a1dHL6VDnDx5EitXrsSPP/6IY8eOQaFQIDAwEHV1dR29tHYxePBgbNmyBdnZ2Th//jwef/xxhIaG4pdffunopbUepof7/vvvmTFjxjC//PILA4C5ePFiRy+pwyQlJTEikYhpaGjo6KV0iPfff59xdXXt6GW0uz179jB9+/bt6GW0qcmTJzMrV67kflepVIyLiwsTGxvbgavqGACYhISEjl5Gh6qsrGQAMCdPnuzopXQYe3t75vPPP+/oZbSaHr0zU1FRgRdeeAFff/01evfu3dHL6VC3b9/G3r174evrC6lU2tHL6RB3795F//79O3oZpJU1NDQgOzsbs2bN4h4Ti8WYNWsWMjMzO3BlpKPcvXsXAHrk/7+rVCrEx8ejrq4OPj4+Hb2cVtNjgxmGYbBkyRK8/PLL8PLy6ujldJg333wTffr0wUMPPYTi4mIkJSV19JI6REFBAXbu3ImXXnqpo5dCWtkff/wBlUoFR0dH3uOOjo4oLy/voFWRjqJWq/Haa69h6tSp8PDw6OjltJucnBzY2NjAysoKL7/8MhISEjB27NiOXlar6XbBzPr16yESiYz+5OXlYefOnaipqUFUVFRHL7lVmXv/rDfeeAMXL17E0aNHIZFI8Pe//x1MF24K3dT7B4CSkhIEBQXhqaeewgsvvNBBK28dzbl/QnqSlStXIjc3F/Hx8R29lHY1evRoXLp0CVlZWVi+fDkWL16MX3/9taOX1Wq63TiDW7du4c8//zT6mhEjRmDBggU4cuQIRCIR97hKpYJEIsHChQvx1VdftfVS24S5929paan3+M2bNzFkyBCcPXu2y24/NvX+S0tLERAQAG9vb8TFxUEs7trxfXP+/cfFxeG1117DnTt32nh1HaOhoQG9e/fGoUOHEBYWxj2+ePFi3Llzp8ftRopEIiQkJPD+Fj3FK6+8gqSkJJw6dQqurq4dvZwONWvWLIwcORKffvppRy+lVVh09AJa28CBAzFw4ECTr/voo4/w73//m/u9tLQUs2fPxrfffospU6a05RLblLn3L0StVgPQlKp3VU25/5KSEsyYMQOenp7Ys2dPlw9kgJb9+++uLC0t4enpiePHj3Nf4Gq1GsePH8crr7zSsYsj7YJhGKxatQoJCQlIT0/v8YEMoPn/ga7833pd3S6YMdfQoUN5v9vY2AAARo4cicGDB3fEktpVVlYWzp07h2nTpsHe3h5Xr17Fxo0bMXLkyC67K9MUJSUlCAgIwLBhw7B161bcunWLe87JyakDV9Z+iouLcfv2bRQXF0OlUnE9lkaNGsX9/0N3sXr1aixevBheXl6YPHkyduzYgbq6OixdurSjl9YuamtrUVBQwP1eVFSES5cuoX///nr/LeyOVq5ciX379iEpKQm2trZcrlTfvn3Rq1evDl5d24uKikJwcDCGDh2Kmpoa7Nu3D+np6fjhhx86emmtp0NrqTqRoqKiHlWaffnyZWbGjBlM//79GSsrK2b48OHMyy+/zNy8ebOjl9Yu9uzZwwAQ/OkpFi9eLHj/aWlpHb20NrFz505m6NChjKWlJTN58mTmxx9/7OgltZu0tDTBf9eLFy/u6KW1C0P/v75nz56OXlq7eO6555hhw4YxlpaWzMCBA5mZM2cyR48e7ehltapulzNDCCGEkJ6l6ycJEEIIIaRHo2CGEEIIIV0aBTOEEEII6dIomCGEEEJIl0bBDCGEEEK6NApmCCGEENKlUTBDCCGEkC6NghlCCCGEdGkUzBBCCCGkS6NghhBCCCFdGgUzhBBCCOnSKJghhBBCSJf2/wEj1JBQxjBL6wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coef=56.8217593669845\n"
     ]
    }
   ],
   "source": [
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "'''\n",
    "make dummy regression data\n",
    "sklearn.datasets.make_regression \n",
    "\n",
    "params:\n",
    "    @random_state, int or None\n",
    "    随机数状态,类似random seed,在多次的不同调用中可以传入相同的数来生成可重复的输出\n",
    "    \n",
    "    @n_samples : int, optional (default=1)\n",
    "    回归的目标数目，也就是回归的目标结果的维度，默认是一个标量数字(1维)\n",
    "\n",
    "    @n_features : int, optional (default=100) 特征数，这里为1，说明为x,y二维数据\n",
    "    \n",
    "    @noise : float, optional (default=0.0),\n",
    "    生成的数据并不是完全理想的拟合回归模型的数据,而是带有高斯噪声的,noise变量定义了高斯噪声的标准差\n",
    "    The standard deviation of the gaussian noise applied to the output.\n",
    "\n",
    "    bias为偏置,intercept,\n",
    "\n",
    "    coef为系数,返回系数。bias为50为已经给定的具体的值，\n",
    "'''\n",
    "\n",
    "X, Y, Coef = datasets.make_regression(n_samples=600, n_features=1, noise=20, random_state=0, bias=50, coef=True)\n",
    "\n",
    "'''\n",
    "按照一定的比例随机切分训练集和测试集\n",
    "sklearn.model_selection.train_test_split\n",
    "params\n",
    "    @test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量\n",
    "'''\n",
    "\n",
    "X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.1, random_state=0)\n",
    "X0_train = np.ones([X_train.shape[0],1],dtype=X_train.dtype)\n",
    "X0_test = np.ones([X_test.shape[0],1], dtype=X_test.dtype)\n",
    "X_train_original = copy.deepcopy(X_train)\n",
    "\n",
    "# 拼接数据\n",
    "X_train = np.concatenate((X0_train, X_train), axis=1)\n",
    "X_test = np.concatenate((X0_test, X_test), axis=1)\n",
    "\n",
    "# show data\n",
    "plt.scatter(X_test[:,1], Y_test, c='red', edgecolors='white')\n",
    "plt.scatter(X_train[:,1], Y_train, c='green', edgecolors='white')\n",
    "plt.ylim((Y.min()-10, Y.max()+10))\n",
    "plt.xlim((X.min()-1, X.max()+1))\n",
    "plt.show()\n",
    "print('Coef={}'.format(Coef))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于Mini Batch的SGD算法原生实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 1)\n"
     ]
    }
   ],
   "source": [
    "test = np.zeros([2,1], dtype=np.float32)\n",
    "print(test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-08-16T00:36:52.210464Z",
     "iopub.status.busy": "2022-08-16T00:36:52.209960Z",
     "iopub.status.idle": "2022-08-16T00:37:06.933254Z",
     "shell.execute_reply": "2022-08-16T00:37:06.931890Z",
     "shell.execute_reply.started": "2022-08-16T00:36:52.210415Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0/3, loss: 154285.04508909627, Weight: 58.851701198081656, Bias:47.58667393109701]\n",
      "[1/3, loss: 56189.87576484548, Weight: 59.11776320176755, Bias:47.889867418184]\n",
      "[2/3, loss: 55937.17903077366, Weight: 59.11910016276339, Bias:47.89163154198456]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.animation as animation\n",
    "import copy\n",
    "#import pdb\n",
    "#pdb.set_trace()\n",
    "\n",
    "#learnable parameter theta，参数theta为两个变量，theta0，和theta1\n",
    "# 矩阵形式 (2, 1)\n",
    "THETA = np.zeros([2,1], dtype=np.float32)\n",
    "# learning rate\n",
    "lr = 0.02\n",
    "epoch = 3\n",
    "\n",
    "#plt.ion()\n",
    "thetas = []\n",
    "ln = None\n",
    "'''\n",
    "linspace,Return evenly spaced numbers over a specified interval.\n",
    "在闭区间[2, 3]生成5个间隔相同的数字\n",
    "print(np.linspace(2.0, 3.0, num=5))\n",
    "[2.   2.25 2.5  2.75 3.  ]\n",
    "'''\n",
    "\n",
    "p_x = np.linspace(X.min()-1, X.max()+1, 50)\n",
    "fig = plt.figure()\n",
    "plt.scatter(X_train[:,1], Y_train, c='purple', marker='o', edgecolors='white')\n",
    "ln, = plt.plot(p_x, THETA[1,0]*p_x+THETA[0,0], c='orange')\n",
    "\n",
    "def init():\n",
    "    plt.ylim((Y.min()-10, Y.max()+10))\n",
    "    plt.xlim((X.min()-1, X.max()+1))    \n",
    "    return ln,\n",
    "\n",
    "'''\n",
    "numpy中的乘法\n",
    "元素相乘:multply()\n",
    "矩阵相乘:dot()、matmul()、’@'*': 是特别的。在数组操作中，作为元素相乘；在矩阵操作中作为矩阵相乘。\n",
    "batch_X\n",
    "[[ 1.          1.        ]\n",
    "    [ 0.37642553 -1.16514984]]\n",
    "\n",
    "batch-Y\n",
    "[[ 85.83865632]\n",
    "    [-45.48857996]]\n",
    "theta\n",
    "[[0.40350076]\n",
    "    [0.85312873]]\n",
    "loss\n",
    "[[2359.37145637 2359.37145637]]\n",
    "\n",
    "'''\n",
    "def h(theta, X):\n",
    "    # theta.T为一行元素的矩阵，X为列向量拼接的数据，一列数据一个样本，支持多个样本形成的mini batch数据\n",
    "    # 1*n和n*m(m为样本数量)的矩阵相乘得到1*m个结果的矩阵\n",
    "    h_x = np.matmul(theta.T,X)\n",
    "    #import pdb\n",
    "    #pdb.set_trace()\n",
    "    return h_x\n",
    "\n",
    "# Y为m*1 matrix，Y.T.shape=(1,m), [1,m]和[m,1]的矩阵相乘得出cost\n",
    "def loss_function(theta, X, Y):\n",
    "    cost = 1/2*np.matmul((h(theta,X)-Y.T),(h(X,theta)-Y.T).T)\n",
    "    return cost/(X.shape[0]) #平均cost\n",
    "\n",
    "# child block matrix trick using multiply functions\n",
    "# X.T.shape = m*n（m为样本数量），相当于m个样本的数据\n",
    "# h(theta,X)-Y.T的shape为(1,m),转置为(m,1)，相当于样本数量个残差\n",
    "# np.multiply具有广播功能，结果为[m,n]形状的矩阵\n",
    "# 在第一个维度求平均，得到平均的梯度，且称为n=2的向量\n",
    "def gradient(theta,X, Y):\n",
    "    gradient = np.multiply(X.T,(h(theta,X)-Y.T).T)\n",
    "    return gradient.mean(axis=0).T\n",
    "\n",
    "#梯度下降算法\n",
    "def update_parameters(theta, gradient, lr):\n",
    "    theta = theta-lr*gradient\n",
    "    return theta\n",
    "\n",
    "def update(frame):\n",
    "    #xdata.append(frame)\n",
    "    #ydata.append(np.shin(frame))\n",
    "    Y = frame[1,0]*p_x+frame[0,0]\n",
    "    ln.set_data(p_x, Y)\n",
    "    return ln,\n",
    "\n",
    "for ep in range(epoch):\n",
    "    loss = 0\n",
    "    for index in range(X_train.shape[0]//2):\n",
    "        batch_X = X_train[index*2:(index+1)*2,:].T # 2*2 matrix\n",
    "        batch_Y = Y_train[index*2:(index+1)*2].reshape([2,1])# 2*1 matrix\n",
    "        h_X = h(THETA, batch_X) # 1*2 matrix\n",
    "        loss += loss_function(THETA, batch_X, batch_Y)\n",
    "        g = gradient(THETA, batch_X, batch_Y)\n",
    "        g = g.reshape([2,1])\n",
    "        THETA = update_parameters(THETA, g, lr)\n",
    "        theta = copy.deepcopy(THETA)\n",
    "        thetas.append(theta)\n",
    "    avg_loss = loss.mean()\n",
    "    print(f\"[{ep}/{epoch}, loss: {avg_loss}, Weight: { THETA[1,0]}, Bias:{THETA[0,0]}]\")\n",
    "        #import IPython\n",
    "        #IPython.embed(colors=\"Linux\")\n",
    "        #plt.cla()\n",
    "        #plt.scatter(X_train[:,1], Y_train, c='purple', marker='o', edgecolors='white')\n",
    "        #plt.plot(p_x, THETA[1,0]*p_x+THETA[0,0], c='orange')\n",
    "        #plt.pause(0.01)\n",
    "        # ims.append(im)\n",
    "#plt.ioff()\n",
    "anim = animation.FuncAnimation(fig, update,frames=thetas,interval=100,init_func=init, blit=True)\n",
    "# plt.show()\n",
    "#anim.save(\"/kaggle/working/linear_regression_demo.gif\",writer='pillow')\n",
    "# ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000)\n",
    "anim.save(\"./sgd_linear_regression.gif\",writer='pillow')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 采用pytorch框架进行线性回归实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-08-16T00:37:06.936245Z",
     "iopub.status.busy": "2022-08-16T00:37:06.935828Z",
     "iopub.status.idle": "2022-08-16T00:37:17.621825Z",
     "shell.execute_reply": "2022-08-16T00:37:17.620786Z",
     "shell.execute_reply.started": "2022-08-16T00:37:06.936208Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [4/5], Loss: 210.0708\n",
      "Epoch [4/5], Loss: 210.1428\n",
      "Epoch [4/5], Loss: 210.1428\n",
      "Epoch [4/5], Loss: 210.1428\n",
      "Epoch [4/5], Loss: 210.1428\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%load_ext tensorboard\n",
    "#%tensorboard --logdir ./\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import time\n",
    "\n",
    "train_log_filepath = \"./train_log.txt\"\n",
    "train_log_txt_formatter = \"{time_str} [Epoch] {epoch:03d} [Loss] {loss_str}\\n\"\n",
    "\n",
    "class LinearRegression(nn.Module):\n",
    "    def __init__(self, input_size, output_size):\n",
    "        super(LinearRegression,self).__init__()\n",
    "        self.linear = nn.Linear(input_size, output_size)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        out = self.linear(x)\n",
    "        return out\n",
    "\n",
    "model = LinearRegression(1,1)\n",
    "model = model.double()\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.02)\n",
    "num_epoches = 5\n",
    "for epoche in range(num_epoches):\n",
    "    for index in range(X_train_original.shape[0]//2):\n",
    "        batch_X = X_train_original[index*2:(index+1)*2,:]\n",
    "        batch_Y = Y_train[index*2:(index+1)*2].reshape([2,1])\n",
    "        inputs = torch.from_numpy(batch_X)\n",
    "        targets = torch.from_numpy(batch_Y)\n",
    "        optimizer.zero_grad()\n",
    "        outputs = model(inputs)\n",
    "        loss = criterion(outputs,targets)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "    #if (epoch+1) % 5 == 0:\n",
    "    print ('Epoch [%d/%d], Loss: %.4f' \n",
    "           %(epoch+1, num_epoches, loss.item()))\n",
    "    to_write = train_log_txt_formatter.format(time_str=time.strftime(\"%Y_%m_%d_%H:%M:%S\"),\n",
    "                                          epoch = epoch,\n",
    "                                          loss_str=loss.item())\n",
    "    with open(train_log_filepath, \"a\") as f:\n",
    "        f.write(to_write)\n",
    "predicted = model(torch.from_numpy(X_train_original)).data.numpy()\n",
    "plt.plot(X_train_original, Y_train, 'ro', label='Original data')\n",
    "plt.plot(X_train_original, predicted, label='Fitted line')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 开源实现参考\n",
    "- [100-Days-Of-ML-Code](https://github.com/Avik-Jain/100-Days-Of-ML-Code)\n",
    "- [numpy-ml](https://github.com/ddbourgin/numpy-ml)\n",
    "\n",
    "下面的代码借鉴自：https://github.com/ddbourgin/numpy-ml/blob/master/numpy_ml/linear_models/linear_regression.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "class LinearRegression:\n",
    "    def __init__(self, fit_intercept=True):\n",
    "        r\"\"\"\n",
    "        A weighted linear least-squares regression model.\n",
    "\n",
    "        Notes\n",
    "        -----\n",
    "        In weighted linear least-squares regression [1]_, a real-valued target\n",
    "        vector, **y**, is modeled as a linear combination of covariates, **X**,\n",
    "        and model coefficients, :math:`\\beta`:\n",
    "\n",
    "        .. math::\n",
    "\n",
    "            y_i = \\beta^\\top \\mathbf{x}_i + \\epsilon_i\n",
    "\n",
    "        In this equation :math:`\\epsilon_i \\sim \\mathcal{N}(0, \\sigma^2_i)` is\n",
    "        the error term associated with example :math:`i`, and\n",
    "        :math:`\\sigma^2_i` is the variance of the corresponding example.\n",
    "\n",
    "        Under this model, the maximum-likelihood estimate for the regression\n",
    "        coefficients, :math:`\\beta`, is:\n",
    "\n",
    "        .. math::\n",
    "\n",
    "            \\hat{\\beta} = \\Sigma^{-1} \\mathbf{X}^\\top \\mathbf{Wy}\n",
    "\n",
    "        where :math:`\\Sigma^{-1} = (\\mathbf{X}^\\top \\mathbf{WX})^{-1}` and\n",
    "        **W** is a diagonal matrix of weights, with each entry inversely\n",
    "        proportional to the variance of the corresponding measurement. When\n",
    "        **W** is the identity matrix the examples are weighted equally and the\n",
    "        model reduces to standard linear least squares [2]_.\n",
    "\n",
    "        References\n",
    "        ----------\n",
    "        .. [1] https://en.wikipedia.org/wiki/Weighted_least_squares\n",
    "        .. [2] https://en.wikipedia.org/wiki/General_linear_model\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        fit_intercept : bool\n",
    "            Whether to fit an intercept term in addition to the model\n",
    "            coefficients. Default is True.\n",
    "\n",
    "        Attributes\n",
    "        ----------\n",
    "        beta : :py:class:`ndarray <numpy.ndarray>` of shape `(M, K)` or None\n",
    "            Fitted model coefficients.\n",
    "        sigma_inv : :py:class:`ndarray <numpy.ndarray>` of shape `(N, N)` or None\n",
    "            Inverse of the data covariance matrix.\n",
    "        \"\"\"\n",
    "        # beta参数\n",
    "        # \n",
    "        self.beta = None\n",
    "        self.sigma_inv = None\n",
    "        self.fit_intercept = fit_intercept\n",
    "\n",
    "        self._is_fit = False\n",
    "\n",
    "    def update(self, X, y, weights=None):\n",
    "        r\"\"\"\n",
    "        Incrementally update the linear least-squares coefficients for a set of\n",
    "        new examples.\n",
    "\n",
    "        Notes\n",
    "        -----\n",
    "        The recursive least-squares algorithm [3]_ [4]_ is used to efficiently\n",
    "        update the regression parameters as new examples become available. For\n",
    "        a single new example :math:`(\\mathbf{x}_{t+1}, \\mathbf{y}_{t+1})`, the\n",
    "        parameter updates are\n",
    "\n",
    "        .. math::\n",
    "\n",
    "            \\beta_{t+1} = \\left(\n",
    "                \\mathbf{X}_{1:t}^\\top \\mathbf{X}_{1:t} +\n",
    "                    \\mathbf{x}_{t+1}\\mathbf{x}_{t+1}^\\top \\right)^{-1}\n",
    "                        \\mathbf{X}_{1:t}^\\top \\mathbf{Y}_{1:t} +\n",
    "                            \\mathbf{x}_{t+1}^\\top \\mathbf{y}_{t+1}\n",
    "\n",
    "        where :math:`\\beta_{t+1}` are the updated regression coefficients,\n",
    "        :math:`\\mathbf{X}_{1:t}` and :math:`\\mathbf{Y}_{1:t}` are the set of\n",
    "        examples observed from timestep 1 to *t*.\n",
    "\n",
    "        In the single-example case, the RLS algorithm uses the Sherman-Morrison\n",
    "        formula [5]_ to avoid re-inverting the covariance matrix on each new\n",
    "        update. In the multi-example case (i.e., where :math:`\\mathbf{X}_{t+1}`\n",
    "        and :math:`\\mathbf{y}_{t+1}` are matrices of `N` examples each), we use\n",
    "        the generalized Woodbury matrix identity [6]_ to update the inverse\n",
    "        covariance. This comes at a performance cost, but is still more\n",
    "        performant than doing multiple single-example updates if *N* is large.\n",
    "\n",
    "        References\n",
    "        ----------\n",
    "        .. [3] Gauss, C. F. (1821) *Theoria combinationis observationum\n",
    "           erroribus minimis obnoxiae*, Werke, 4. Gottinge\n",
    "        .. [4] https://en.wikipedia.org/wiki/Recursive_least_squares_filter\n",
    "        .. [5] https://en.wikipedia.org/wiki/Sherman%E2%80%93Morrison_formula\n",
    "        .. [6] https://en.wikipedia.org/wiki/Woodbury_matrix_identity\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        X : :py:class:`ndarray <numpy.ndarray>` of shape `(N, M)`\n",
    "            A dataset consisting of `N` examples, each of dimension `M`\n",
    "        y : :py:class:`ndarray <numpy.ndarray>` of shape `(N, K)`\n",
    "            The targets for each of the `N` examples in `X`, where each target\n",
    "            has dimension `K`\n",
    "        weights : :py:class:`ndarray <numpy.ndarray>` of shape `(N,)` or None\n",
    "            Weights associated with the examples in `X`. Examples\n",
    "            with larger weights exert greater influence on model fit.  When\n",
    "            `y` is a vector (i.e., `K = 1`), weights should be set to the\n",
    "            reciporical of the variance for each measurement (i.e., :math:`w_i\n",
    "            = 1/\\sigma^2_i`). When `K > 1`, it is assumed that all columns of\n",
    "            `y` share the same weight :math:`w_i`. If None, examples are\n",
    "            weighted equally, resulting in the standard linear least squares\n",
    "            update.  Default is None.\n",
    "\n",
    "        Returns\n",
    "        -------\n",
    "        self : :class:`LinearRegression <numpy_ml.linear_models.LinearRegression>` instance\n",
    "        \"\"\"  # noqa: E501\n",
    "        if not self._is_fit:\n",
    "            raise RuntimeError(\"You must call the `fit` method before calling `update`\")\n",
    "\n",
    "        #  numpy的atleast_2d函数确保输入数组至少是 二维数组（2D）。如果输入本身已经是二维或更高维的数组，则不会改变其结构；如果是一维或零维的，则会添加维度将其扩展为二维。\n",
    "        #  a = np.atleast_2d(3) -》  [[3]]\n",
    "        #  a = np.atleast_2d([1, 2, 3]) -》[[1 2 3]]\n",
    "        X, y = np.atleast_2d(X), np.atleast_2d(y)\n",
    "\n",
    "        X1, Y1 = X.shape[0], y.shape[0]\n",
    "        weights = np.ones(X1) if weights is None else np.atleast_1d(weights)\n",
    "        weights = np.squeeze(weights) if weights.size > 1 else weights\n",
    "\n",
    "        err_str = f\"weights must have shape ({X1},) but got {weights.shape}\"\n",
    "        assert weights.shape == (X1,), err_str\n",
    "\n",
    "        # scale X and y by the weight associated with each example\n",
    "        W = np.diag(np.sqrt(weights))\n",
    "        X, y = W @ X, W @ y\n",
    "\n",
    "        self._update1D(X, y, W) if X1 == Y1 == 1 else self._update2D(X, y, W)\n",
    "        return self\n",
    "\n",
    "    def _update1D(self, x, y, w):\n",
    "        \"\"\"Sherman-Morrison update for a single example\"\"\"\n",
    "        beta, S_inv = self.beta, self.sigma_inv\n",
    "\n",
    "        # convert x to a design vector if we're fitting an intercept\n",
    "        if self.fit_intercept:\n",
    "            x = np.c_[np.diag(w), x]\n",
    "\n",
    "        # update the inverse of the covariance matrix via Sherman-Morrison\n",
    "        S_inv -= (S_inv @ x.T @ x @ S_inv) / (1 + x @ S_inv @ x.T)\n",
    "\n",
    "        # update the model coefficients\n",
    "        beta += S_inv @ x.T @ (y - x @ beta)\n",
    "\n",
    "    def _update2D(self, X, y, W):\n",
    "        \"\"\"Woodbury update for multiple examples\"\"\"\n",
    "        beta, S_inv = self.beta, self.sigma_inv\n",
    "\n",
    "        # convert X to a design matrix if we're fitting an intercept\n",
    "        if self.fit_intercept:\n",
    "            X = np.c_[np.diag(W), X]\n",
    "\n",
    "        I = np.eye(X.shape[0])  # noqa: E741\n",
    "\n",
    "        # update the inverse of the covariance matrix via Woodbury identity\n",
    "        S_inv -= S_inv @ X.T @ np.linalg.pinv(I + X @ S_inv @ X.T) @ X @ S_inv\n",
    "\n",
    "        # update the model coefficients\n",
    "        beta += S_inv @ X.T @ (y - X @ beta)\n",
    "\n",
    "    def fit(self, X, y, weights=None):\n",
    "        r\"\"\"\n",
    "        Fit regression coefficients via maximum likelihood.\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        X : :py:class:`ndarray <numpy.ndarray>` of shape `(N, M)`\n",
    "            A dataset consisting of `N` examples, each of dimension `M`.\n",
    "            N个样本,M的属性,设计矩阵\n",
    "        y : :py:class:`ndarray <numpy.ndarray>` of shape `(N, K)`\n",
    "            The targets for each of the `N` examples in `X`, where each target\n",
    "            has dimension `K`.\n",
    "            N个样本真值,K个值\n",
    "        weights : :py:class:`ndarray <numpy.ndarray>` of shape `(N,)` or None\n",
    "            Weights associated with the examples in `X`. Examples\n",
    "            with larger weights exert greater influence on model fit.  When\n",
    "            `y` is a vector (i.e., `K = 1`), weights should be set to the\n",
    "            reciporical of the variance for each measurement (i.e., :math:`w_i\n",
    "            = 1/\\sigma^2_i`). When `K > 1`, it is assumed that all columns of\n",
    "            `y` share the same weight :math:`w_i`. If None, examples are\n",
    "            weighted equally, resulting in the standard linear least squares\n",
    "            update.  Default is None.\n",
    "            样本权重，加权线性回归。\n",
    "            reciprocal为倒数的意思。\n",
    "\n",
    "        Returns\n",
    "        -------\n",
    "        self : :class:`LinearRegression <numpy_ml.linear_models.LinearRegression>` instance\n",
    "        \"\"\"  # noqa: E501\n",
    "        # N为样本个数\n",
    "        N = X.shape[0]\n",
    "       \n",
    "        \n",
    "        #为普通的等权重的线性回归，其权重数量要和样本数量一致\n",
    "        weights = np.ones(N) if weights is None else np.atleast_1d(weights)\n",
    "        weights = np.squeeze(weights) if weights.size > 1 else weights\n",
    "        err_str = f\"weights must have shape ({N},) but got {weights.shape}\"\n",
    "        assert weights.shape == (N,), err_str\n",
    "\n",
    "        # scale X and y by the weight associated with each example\n",
    "        # 在加权最小二乘中，为了将加权问题转换为标准最小二乘问题，需要对数据进行变换。\n",
    "        # 标准的 WLS 目标是最小化 sum(w_i * (y_i - x_i*beta)^2)。\n",
    "        # 这等价于最小化 sum((sqrt(w_i) * y_i - sqrt(w_i) * x_i*beta)^2)。这里的 W 矩阵就是用于实现这个 sqrt(w_i) 变换的\n",
    "        # 相当于在变换后生成的X，y上做一般标准的线性回归算法\n",
    "        W = np.diag(np.sqrt(weights))\n",
    "        X, y = W @ X, W @ y\n",
    "\n",
    "        # convert X to a design matrix if we're fitting an intercept\n",
    "        # np.c_相当于concatenate操作，用于连接两个矩阵，如果为一般的线性回归，偏置项对应的值为1\n",
    "        if self.fit_intercept:\n",
    "            X = np.c_[np.sqrt(weights), X]\n",
    "\n",
    "        print(X.shape)\n",
    "\n",
    "        #计算X.T @ X的伪逆，最小二乘正规方程所得解的 (X^T X)^-1 X^T y 中的 X^T X 部分\n",
    "        self.sigma_inv = np.linalg.pinv(X.T @ X)\n",
    "        #整个正规方程所得参数的解\n",
    "        self.beta = np.atleast_2d(self.sigma_inv @ X.T @ y)\n",
    "\n",
    "        self._is_fit = True\n",
    "        return self\n",
    "\n",
    "    def predict(self, X):\n",
    "        \"\"\"\n",
    "        Use the trained model to generate predictions on a new collection of\n",
    "        data points.\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        X : :py:class:`ndarray <numpy.ndarray>` of shape `(Z, M)`\n",
    "            A dataset consisting of `Z` new examples, each of dimension `M`.\n",
    "\n",
    "        Returns\n",
    "        -------\n",
    "        y_pred : :py:class:`ndarray <numpy.ndarray>` of shape `(Z, K)`\n",
    "            The model predictions for the items in `X`.\n",
    "        \"\"\"\n",
    "        # np.c_ 用于连接两个矩阵\n",
    "        # c表示columns，按列拼接，应该是使列的数量增加；r表示rows，按行拼接，使行数增加。\n",
    "        #这个函数和numpy.vstack，numpy.hstack的功能相同！！！\n",
    "        # convert X to a design matrix if we're fitting an intercept\n",
    "        # @ python3.5后的新运算符,它与numpy.dot（）的作用是一样的，矩阵乘法\n",
    "        if self.fit_intercept:\n",
    "            X = np.c_[np.ones(X.shape[0]), X]\n",
    "        print(X.shape, self.beta.shape)\n",
    "        return X @ self.beta.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(540, 2)\n",
      "(60, 2) (1, 2)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[49.9006743 58.2017104]]\n"
     ]
    }
   ],
   "source": [
    "LR = LinearRegression()\n",
    "#print(X_train.shape,X_train_original.shape, Y_train.shape)\n",
    "LR.fit(X_train_original, Y_train)\n",
    "\n",
    "predicted = LR.predict(X_test[:,1])\n",
    "plt.plot(X_test[:,1], Y_test, 'ro', label='Original data')\n",
    "plt.plot(X_test[:,1], predicted, label='Fitted line')\n",
    "plt.show()\n",
    "print(LR.beta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Step 1: Data Preprocessing\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "dataset = pd.read_csv('../../datasets/studentscores.csv')\n",
    "X = dataset.iloc[ : ,   : 1 ].values\n",
    "Y = dataset.iloc[ : , 1 ].values\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用SkLearn机器学习库中提供的机器学习算法实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Step2:Step 2: Fitting Simple Linear Regression Model to the training set\n",
    "from sklearn.linear_model import LinearRegression\n",
    "regressor = LinearRegression()\n",
    "regressor = regressor.fit(X_train, Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Step 3: Predecting the Result\n",
    "Y_pred = regressor.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x27671bbe510>]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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U//+/b1uLzHDpyQZixcv9rqNlPrmm28MScaKFSu8biUljj76aOO//uu/vG7DUTt37jSGDBliLF261DjnnHOMyspKr1tyxN13322ccsopXreRErfffrtx1llned2GayorK41jjz3WaG5u9roVR1x88cXGjBkzLLVwOGxMmzbNo46cs2fPHiMYDBqvv/66pX766acbP/3pTz3qqn18teySbRobGyVJvXr18rgTZ8ViMb344ovavXu3ysrKvG7HURUVFbr44os1fvx4r1tx3IYNG1RcXKzBgwdr2rRp2rRpk9ctOeLVV1/ViBEjNGXKFPXt21ennXaannnmGa/bSol9+/bphRde0IwZMzr8YM90M3r0aC1btkyff/65JOnjjz/WO++8o4suusjjzjrvwIEDisVi6t69u6Wem5urd955x6Ou2scfc9Es1NzcrKqqKo0ZM0bDhw/3uh1HfPLJJyorK9PevXvVs2dPLV68WCeeeKLXbTnmxRdf1AcffJAR67HJGjVqlJ577jkdf/zxamho0D333KPy8nKtW7dOeXl5XrfXKRs3btS8efM0a9Ys/eQnP9GaNWs0c+ZMdevWTdOnT/e6PUe9/PLL2rFjh374wx963Ypj7rjjDkWjUQ0dOlTBYFCxWEz333+/pk2b5nVrnZaXl6eysjLde++9OuGEE1RYWKiFCxdq1apVOu6447xu7/C8Hr2kiny+7PLjH//YGDhwoFFXV+d1K45pamoyNmzYYKxdu9a44447jGOOOcb49NNPvW7LEZs2bTL69u1rfPzxx601Py27tLV9+3YjPz/fF8tmXbt2NcrKyiy1G2+80TjzzDM96ih1LrjgAuOSSy7xug1HLVy40AiFQsbChQuNP//5z8avf/1ro1evXsZzzz3ndWuO+OKLL4yzzz7bkGQEg0Fj5MiRxrRp04yhQ4d63dphET4yUEVFhREKhYyNGzd63UpKnXfeecY111zjdRuOWLx4ceu/HFp+STICgYARDAaNAwcOeN2i40aMGGHccccdXrfRaQMGDDCuvvpqS+2pp54yiouLPeooNb766iujS5cuxssvv+x1K44KhULGk08+aande++9xvHHH+9RR6mxa9cuY8uWLYZhGMZll11m/Mu//IvHHR0eez4yiGEYuuGGG7R48WK99dZbGjRokNctpVRzc7Oampq8bsMR5513nj755BN99NFHrb9GjBihadOm6aOPPlIwGPS6RUft2rVLX375pYqKirxupdPGjBkTd0v7559/roEDB3rUUWo8++yz6tu3ry6++GKvW3HUnj171KWL9aMuGAyqubnZo45So0ePHioqKtL27du1ZMkSTZw40euWDstXez527dqlL774ovXr2tpaffTRR+rVq5cGDBjgYWfOqKio0IIFC/TKK68oLy9PW7dulSQVFBQoNzfX4+46Z/bs2brooos0YMAA7dy5UwsWLNDy5cu1ZMkSr1tzRF5eXtzenB49eqh3796+2LNzyy23aMKECRo4cKC2bNmiu+++W8FgUFdeeaXXrXXaTTfdpNGjR+uBBx7QZZddptWrV2v+/PmaP3++1605prm5Wc8++6ymT5/um1ukW0yYMEH333+/BgwYoGHDhunDDz/Uo48+qhkzZnjdmiOWLFkiwzB0/PHH64svvtCtt96qoUOH6qqrrvK6tcPzevTipLffftuQFPdr+vTpXrfmCLufTZLx7LPPet1ap82YMcMYOHCg0a1bN6NPnz7GeeedZ7z55ptet5VSftrzcfnllxtFRUVGt27djP79+xuXX3658cUXX3jdlmNee+01Y/jw4UZOTo4xdOhQY/78+V635KglS5YYkoz169d73YrjotGoUVlZaQwYMMDo3r27MXjwYOOnP/2p0dTU5HVrjnjppZeMwYMHG926dTP69etnVFRUGDt27PC6re8VMAyfHPMGAAAyAns+AACAqwgfAADAVYQPAADgKsIHAABwFeEDAAC4ivABAABcRfgAAACuInwAAABXET4AAICrCB8AAMBVhA8AAOAqwgcAAHDV/wdQW+SFtHX03AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Step 4: Visualization\n",
    "#Visualising the Training results\n",
    "plt.scatter(X_train , Y_train, color = 'red')\n",
    "plt.plot(X_train , regressor.predict(X_train), color ='blue')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x27671c8cc10>]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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u13q3t1c++AD1wNNERoIHwCAc3M4pLw8qaxM6tXLSAxhYW3+9HfekW64wVw7fdr1CqYIHaxdAACty8mR+veXxo83dibjxxuPc3La9Ok//ak5eMyZY6xZCB6hjckHAKBlOTnGPeudTnO9pMSov/aalJbW4qcePy717Gmubd8uXXGFl3pFQGHyAQBw5XBI99zjGjykxlpmpvG6Ztatcw0e335L8EAjwgcAwFVennToUOvPO51ScbHxuiZ+8APznWd/+1vjpV26eKlPBCTWLgAAV2Vlbr3u6FEpPt78VGGhNHKkh/tCUGDyAQBw1atXm1+3Zo05eNhsUk0NwQOtI3wAAFylpkrJyUaSaInNJmdyH1314Pf1s581lh98UKqvlyIifNMmAhNrFwCAq7AwafFi46wWm8184KnNpnJnonodKpKaHBby6afSpZf6vlUEHiYfAICWpaUZp9NecIGpvKrHXeqlxmNCoqKkujqCB9qO8AEAaF1amvT119KWLXL+72qNvrhKtx5b3PD0H/5g3BQunDk63MB/LgCAcwsLU/F/Xa2+483lzz+XBg+2piUENrcnHyUlJbrlllsUFxenrl276tJLL9XHH3/c8LzT6dTvf/979erVS127dtWECRO0f/9+jzYNAPCd1FSpb9/Gx/Hx0pkzBA+0n1vh4/jx4xo3bpw6d+6sDRs26LPPPtNTTz2lHj16NLzmiSee0DPPPKO//vWv2rFjh7p166aJEyequrra480DALynvt441nTbtsbao49Khw+7dV85wIXN6Wzp2rktu//++/Xhhx8qr9kV7c5yOp3q3bu3fvOb32j+/PmSJLvdrsTERK1cuVK/+MUvvvNrVFVVKTY2Vna7XTExMW1tDQDgQXl50lVXmWsbNhhXMAVa4s7Pb7cmH+vWrdPo0aN10003KSEhQSNGjNBzzz3X8PxXX32l8vJyTZgwoaEWGxurK664Qvn5+S2+Z01NjaqqqkwfAADrDB/uGjzq6gge8By3wseXX36pZcuWaeDAgXr33Xc1e/Zs3X333XrhhRckSeXl5ZKkxMRE0+clJiY2PNdcdna2YmNjGz769OnTnj8HAKCDHA5jzbJ7d2Nt2DDjEh+czQJPcit81NfXa+TIkVqwYIFGjBihO++8U7/85S/117/+td0NZGVlyW63N3wUFxe3+70AAO3z3nuuAWPrVmnP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Visualizing the test results\n",
    "plt.scatter(X_test , Y_test, color = 'red')\n",
    "plt.plot(X_test , regressor.predict(X_test), color ='blue')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
